openwrt_helloworld/daed/patches_riscv/0001-feat-Add-vmlinux-riscv.h.patch
sbwml 959e1ce0b8 daed: fix build for arm & riscv64
Signed-off-by: sbwml <admin@cooluc.com>
2024-12-03 11:37:46 +08:00

103764 lines
2.2 MiB

From fee660bc68eae883d9e18220822fcf5fcb838922 Mon Sep 17 00:00:00 2001
From: Integral <integral@member.fsf.org>
Date: Mon, 25 Nov 2024 20:19:31 +0800
Subject: [PATCH 1/2] feat: Add vmlinux-riscv.h (#4)
---
vmlinux-riscv.h | 103738 +++++++++++++++++++++++++++++++++++++++++++++
vmlinux.h | 2 +
2 files changed, 103740 insertions(+)
create mode 100644 vmlinux-riscv.h
--- /dev/null
+++ b/dae-core/trace/kern/headers/vmlinux-riscv.h
@@ -0,0 +1,103738 @@
+// Code generated by bpftool on Linux 6.12; DO NOT EDIT.
+
+#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 unsigned char __u8;
+
+typedef short unsigned int __u16;
+
+typedef int __s32;
+
+typedef unsigned int __u32;
+
+typedef long long int __s64;
+
+typedef long long unsigned int __u64;
+
+typedef __u8 u8;
+
+typedef __u16 u16;
+
+typedef __s32 s32;
+
+typedef __u32 u32;
+
+typedef __s64 s64;
+
+typedef __u64 u64;
+
+typedef long int __kernel_long_t;
+
+typedef long unsigned int __kernel_ulong_t;
+
+typedef int __kernel_pid_t;
+
+typedef unsigned int __kernel_uid32_t;
+
+typedef __kernel_ulong_t __kernel_size_t;
+
+typedef long long int __kernel_time64_t;
+
+typedef __kernel_long_t __kernel_clock_t;
+
+typedef int __kernel_timer_t;
+
+typedef int __kernel_clockid_t;
+
+typedef __kernel_pid_t pid_t;
+
+typedef __kernel_clockid_t clockid_t;
+
+typedef _Bool bool;
+
+typedef __kernel_uid32_t uid_t;
+
+typedef __kernel_size_t size_t;
+
+typedef s64 ktime_t;
+
+typedef struct {
+ int counter;
+} atomic_t;
+
+typedef struct {
+ s64 counter;
+} atomic64_t;
+
+struct list_head {
+ struct list_head *next;
+ struct list_head *prev;
+};
+
+struct hlist_node;
+
+struct hlist_head {
+ struct hlist_node *first;
+};
+
+struct hlist_node {
+ struct hlist_node *next;
+ struct hlist_node **pprev;
+};
+
+struct callback_head {
+ struct callback_head *next;
+ void (*func)(struct callback_head *);
+};
+
+typedef atomic_t arch_spinlock_t;
+
+struct raw_spinlock {
+ arch_spinlock_t raw_lock;
+ unsigned int magic;
+ unsigned int owner_cpu;
+ void *owner;
+};
+
+typedef struct raw_spinlock raw_spinlock_t;
+
+enum timespec_type {
+ TT_NONE = 0,
+ TT_NATIVE = 1,
+ TT_COMPAT = 2,
+};
+
+struct __kernel_timespec {
+ __kernel_time64_t tv_sec;
+ long long int tv_nsec;
+};
+
+typedef s32 old_time32_t;
+
+struct old_timespec32 {
+ old_time32_t tv_sec;
+ s32 tv_nsec;
+};
+
+struct pollfd;
+
+struct restart_block {
+ long unsigned int arch_data;
+ long int (*fn)(struct restart_block *);
+ union {
+ struct {
+ u32 *uaddr;
+ u32 val;
+ u32 flags;
+ u32 bitset;
+ u64 time;
+ u32 *uaddr2;
+ } futex;
+ struct {
+ clockid_t clockid;
+ enum timespec_type type;
+ union {
+ struct __kernel_timespec *rmtp;
+ struct old_timespec32 *compat_rmtp;
+ };
+ u64 expires;
+ } nanosleep;
+ struct {
+ struct pollfd *ufds;
+ int nfds;
+ int has_timeout;
+ long unsigned int tv_sec;
+ long unsigned int tv_nsec;
+ } poll;
+ };
+};
+
+struct thread_info {
+ long unsigned int flags;
+ int preempt_count;
+ long int kernel_sp;
+ long int user_sp;
+ int cpu;
+ long unsigned int syscall_work;
+ long unsigned int a0;
+ long unsigned int a1;
+ long unsigned int a2;
+};
+
+struct refcount_struct {
+ atomic_t refs;
+};
+
+typedef struct refcount_struct refcount_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 load_weight {
+ long unsigned int weight;
+ u32 inv_weight;
+};
+
+struct rb_node {
+ long unsigned int __rb_parent_color;
+ struct rb_node *rb_right;
+ struct rb_node *rb_left;
+};
+
+struct sched_avg {
+ u64 last_update_time;
+ u64 load_sum;
+ u64 runnable_sum;
+ u32 util_sum;
+ u32 period_contrib;
+ long unsigned int load_avg;
+ long unsigned int runnable_avg;
+ long unsigned int util_avg;
+ unsigned int util_est;
+};
+
+struct cfs_rq;
+
+struct sched_entity {
+ struct load_weight load;
+ struct rb_node run_node;
+ u64 deadline;
+ u64 min_vruntime;
+ u64 min_slice;
+ struct list_head group_node;
+ unsigned char on_rq;
+ unsigned char sched_delayed;
+ unsigned char rel_deadline;
+ unsigned char custom_slice;
+ 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;
+ long unsigned int runnable_weight;
+ long: 64;
+ struct sched_avg avg;
+};
+
+struct rt_rq;
+
+struct sched_rt_entity {
+ struct list_head run_list;
+ long unsigned int timeout;
+ long unsigned int watchdog_stamp;
+ unsigned int time_slice;
+ short unsigned int on_rq;
+ short unsigned int on_list;
+ struct sched_rt_entity *back;
+ struct sched_rt_entity *parent;
+ struct rt_rq *rt_rq;
+ struct rt_rq *my_q;
+};
+
+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;
+};
+
+struct sched_dl_entity;
+
+typedef bool (*dl_server_has_tasks_f)(struct sched_dl_entity *);
+
+struct task_struct;
+
+typedef struct task_struct * (*dl_server_pick_f)(struct sched_dl_entity *);
+
+struct rq;
+
+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;
+ unsigned int dl_server: 1;
+ unsigned int dl_defer: 1;
+ unsigned int dl_defer_armed: 1;
+ unsigned int dl_defer_running: 1;
+ struct hrtimer dl_timer;
+ struct hrtimer inactive_timer;
+ struct rq *rq;
+ dl_server_has_tasks_f server_has_tasks;
+ dl_server_pick_f server_pick_task;
+ struct sched_dl_entity *pi_se;
+};
+
+struct sched_statistics {};
+
+struct cpumask {
+ long unsigned int 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 {
+ long unsigned int pcount;
+ long long unsigned int run_delay;
+ long long unsigned int last_arrival;
+ long long unsigned int last_queued;
+};
+
+struct plist_node {
+ int prio;
+ struct list_head prio_list;
+ struct list_head node_list;
+};
+
+struct prev_cputime {
+ u64 utime;
+ u64 stime;
+ raw_spinlock_t lock;
+};
+
+struct rb_root {
+ struct rb_node *rb_node;
+};
+
+struct rb_root_cached {
+ struct rb_root rb_root;
+ struct rb_node *rb_leftmost;
+};
+
+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;
+};
+
+typedef atomic64_t atomic_long_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;
+ void *magic;
+};
+
+struct posix_cputimers_work {
+ struct callback_head work;
+ struct mutex mutex;
+ unsigned int scheduled;
+};
+
+struct sem_undo_list;
+
+struct sysv_sem {
+ struct sem_undo_list *undo_list;
+};
+
+struct sysv_shm {
+ struct list_head shm_clist;
+};
+
+typedef struct {
+ long unsigned int sig[1];
+} sigset_t;
+
+struct sigpending {
+ struct list_head list;
+ sigset_t signal;
+};
+
+typedef struct {
+ uid_t val;
+} kuid_t;
+
+struct seccomp_filter;
+
+struct seccomp {
+ int mode;
+ atomic_t filter_count;
+ struct seccomp_filter *filter;
+};
+
+struct syscall_user_dispatch {
+ char *selector;
+ long unsigned int offset;
+ long unsigned int len;
+ bool on_dispatch;
+};
+
+struct spinlock {
+ union {
+ struct raw_spinlock rlock;
+ };
+};
+
+typedef struct spinlock spinlock_t;
+
+struct wake_q_node {
+ struct wake_q_node *next;
+};
+
+struct task_io_accounting {};
+
+typedef struct {
+ long unsigned int bits[1];
+} nodemask_t;
+
+struct seqcount {
+ unsigned int sequence;
+};
+
+typedef struct seqcount seqcount_t;
+
+struct seqcount_spinlock {
+ seqcount_t seqcount;
+};
+
+typedef struct seqcount_spinlock seqcount_spinlock_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;
+ long unsigned int expires;
+ void (*function)(struct timer_list *);
+ u32 flags;
+};
+
+struct __riscv_d_ext_state {
+ __u64 f[32];
+ __u32 fcsr;
+};
+
+struct __riscv_v_ext_state {
+ long unsigned int vstart;
+ long unsigned int vl;
+ long unsigned int vtype;
+ long unsigned int vcsr;
+ long unsigned int vlenb;
+ void *datap;
+};
+
+struct thread_struct {
+ long unsigned int ra;
+ long unsigned int sp;
+ long unsigned int s[12];
+ struct __riscv_d_ext_state fstate;
+ long unsigned int bad_cause;
+ u32 riscv_v_flags;
+ u32 vstate_ctrl;
+ struct __riscv_v_ext_state vstate;
+ long unsigned int align_ctl;
+ struct __riscv_v_ext_state kernel_vstate;
+ bool force_icache_flush;
+ unsigned int prev_cpu;
+};
+
+struct sched_class;
+
+struct task_group;
+
+struct mm_struct;
+
+struct address_space;
+
+struct pid;
+
+struct completion;
+
+struct cred;
+
+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 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 rseq;
+
+struct pipe_inode_info;
+
+struct mem_cgroup;
+
+struct obj_cgroup;
+
+struct gendisk;
+
+struct vm_struct;
+
+struct bpf_local_storage;
+
+struct bpf_run_ctx;
+
+struct bpf_net_context;
+
+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;
+ long unsigned int 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;
+ struct sched_entity se;
+ struct sched_rt_entity rt;
+ struct sched_dl_entity dl;
+ struct sched_dl_entity *dl_server;
+ const struct sched_class *sched_class;
+ struct task_group *sched_task_group;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct sched_statistics stats;
+ struct hlist_head preempt_notifiers;
+ unsigned int policy;
+ long unsigned int max_allowed_capacity;
+ int nr_cpus_allowed;
+ const cpumask_t *cpus_ptr;
+ cpumask_t *user_cpus_ptr;
+ cpumask_t cpus_mask;
+ void *migration_pending;
+ short unsigned int migration_disabled;
+ short unsigned int migration_flags;
+ 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;
+ struct address_space *faults_disabled_mapping;
+ int exit_state;
+ int exit_code;
+ int exit_signal;
+ int pdeath_signal;
+ long unsigned int 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 sched_rt_mutex: 1;
+ unsigned int in_execve: 1;
+ unsigned int in_iowait: 1;
+ unsigned int brk_randomized: 1;
+ unsigned int no_cgroup_migration: 1;
+ unsigned int frozen: 1;
+ unsigned int use_memdelay: 1;
+ unsigned int in_eventfd: 1;
+ long unsigned int atomic_flags;
+ struct restart_block restart_block;
+ pid_t pid;
+ pid_t tgid;
+ long unsigned int stack_canary;
+ struct task_struct *real_parent;
+ struct task_struct *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_node;
+ struct completion *vfork_done;
+ int *set_child_tid;
+ int *clear_child_tid;
+ void *worker_private;
+ u64 utime;
+ u64 stime;
+ u64 gtime;
+ struct prev_cputime prev_cputime;
+ long unsigned int nvcsw;
+ long unsigned int nivcsw;
+ u64 start_time;
+ u64 start_boottime;
+ long unsigned int min_flt;
+ long unsigned int maj_flt;
+ struct posix_cputimers posix_cputimers;
+ struct posix_cputimers_work posix_cputimers_work;
+ const struct cred *ptracer_cred;
+ const struct cred *real_cred;
+ const struct cred *cred;
+ struct key *cached_requested_key;
+ char comm[16];
+ struct nameidata *nameidata;
+ struct sysv_sem sysvsem;
+ struct sysv_shm sysvshm;
+ long unsigned int last_switch_count;
+ long unsigned int 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 *sighand;
+ sigset_t blocked;
+ sigset_t real_blocked;
+ sigset_t saved_sigmask;
+ struct sigpending pending;
+ long unsigned int 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;
+ struct rb_root_cached pi_waiters;
+ struct task_struct *pi_top_task;
+ struct rt_mutex_waiter *pi_blocked_on;
+ struct mutex_waiter *blocked_on;
+ int non_block_count;
+ 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;
+ long unsigned int ptrace_message;
+ kernel_siginfo_t *last_siginfo;
+ struct task_io_accounting ioac;
+ nodemask_t mems_allowed;
+ seqcount_spinlock_t mems_allowed_seq;
+ int cpuset_mem_spread_rotor;
+ struct css_set *cgroups;
+ struct list_head cg_list;
+ struct robust_list_head *robust_list;
+ struct compat_robust_list_head *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;
+ u8 perf_recursion[4];
+ struct perf_event_context *perf_event_ctxp;
+ struct mutex perf_event_mutex;
+ struct list_head perf_event_list;
+ struct rseq *rseq;
+ u32 rseq_len;
+ u32 rseq_sig;
+ long unsigned int rseq_event_mask;
+ int mm_cid;
+ int last_mm_cid;
+ int migrate_from_cpu;
+ int mm_cid_active;
+ struct callback_head cid_work;
+ struct tlbflush_unmap_batch tlb_ubc;
+ struct pipe_inode_info *splice_pipe;
+ struct page_frag task_frag;
+ int nr_dirtied;
+ int nr_dirtied_pause;
+ long unsigned int dirty_paused_when;
+ u64 timer_slack_ns;
+ u64 default_timer_slack_ns;
+ unsigned int memcg_nr_pages_over_high;
+ struct mem_cgroup *active_memcg;
+ struct obj_cgroup *objcg;
+ struct gendisk *throttle_disk;
+ struct kmap_ctrl kmap_ctrl;
+ long unsigned int task_state_change;
+ 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 *bpf_storage;
+ struct bpf_run_ctx *bpf_ctx;
+ struct bpf_net_context *bpf_net_context;
+ struct thread_struct thread;
+};
+
+typedef struct {
+ long unsigned int pgd;
+} pgd_t;
+
+struct page_pool;
+
+struct dev_pagemap;
+
+struct page {
+ long unsigned int 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 {
+ long unsigned int index;
+ long unsigned int share;
+ };
+ long unsigned int private;
+ };
+ struct {
+ long unsigned int pp_magic;
+ struct page_pool *pp;
+ long unsigned int _pp_mapping_pad;
+ long unsigned int dma_addr;
+ atomic_long_t pp_ref_count;
+ };
+ struct {
+ long unsigned int compound_head;
+ };
+ struct {
+ struct dev_pagemap *pgmap;
+ void *zone_device_data;
+ };
+ struct callback_head callback_head;
+ };
+ union {
+ unsigned int page_type;
+ atomic_t _mapcount;
+ };
+ atomic_t _refcount;
+ long unsigned int memcg_data;
+};
+
+typedef struct {} lockdep_map_p;
+
+struct maple_tree {
+ union {
+ spinlock_t ma_lock;
+ lockdep_map_p ma_external_lock;
+ };
+ unsigned int ma_flags;
+ void *ma_root;
+};
+
+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;
+ void *magic;
+};
+
+struct swait_queue_head {
+ raw_spinlock_t lock;
+ struct list_head task_list;
+};
+
+struct completion {
+ unsigned int done;
+ struct swait_queue_head wait;
+};
+
+struct percpu_counter {
+ raw_spinlock_t lock;
+ s64 count;
+ struct list_head list;
+ s32 *counters;
+};
+
+typedef struct {
+ atomic_long_t id;
+ void *vdso;
+ cpumask_t icache_stale_mask;
+ bool force_icache_flush;
+} mm_context_t;
+
+struct uprobes_state {};
+
+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;
+};
+
+struct mm_cid;
+
+struct linux_binfmt;
+
+struct kioctx_table;
+
+struct user_namespace;
+
+struct file;
+
+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;
+ long unsigned int mmap_base;
+ long unsigned int mmap_legacy_base;
+ long unsigned int task_size;
+ pgd_t *pgd;
+ atomic_t membarrier_state;
+ atomic_t mm_users;
+ struct mm_cid *pcpu_cid;
+ long unsigned int mm_cid_next_scan;
+ 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;
+ long unsigned int hiwater_rss;
+ long unsigned int hiwater_vm;
+ long unsigned int total_vm;
+ long unsigned int locked_vm;
+ atomic64_t pinned_vm;
+ long unsigned int data_vm;
+ long unsigned int exec_vm;
+ long unsigned int stack_vm;
+ long unsigned int def_flags;
+ seqcount_t write_protect_seq;
+ spinlock_t arg_lock;
+ long unsigned int start_code;
+ long unsigned int end_code;
+ long unsigned int start_data;
+ long unsigned int end_data;
+ long unsigned int start_brk;
+ long unsigned int brk;
+ long unsigned int start_stack;
+ long unsigned int arg_start;
+ long unsigned int arg_end;
+ long unsigned int env_start;
+ long unsigned int env_end;
+ long unsigned int saved_auxv[66];
+ struct percpu_counter rss_stat[4];
+ struct linux_binfmt *binfmt;
+ mm_context_t context;
+ long unsigned int flags;
+ spinlock_t ioctx_lock;
+ struct kioctx_table *ioctx_table;
+ struct task_struct *owner;
+ struct user_namespace *user_ns;
+ struct file *exe_file;
+ struct mmu_notifier_subscriptions *notifier_subscriptions;
+ atomic_t tlb_flush_pending;
+ atomic_t tlb_flush_batched;
+ struct uprobes_state uprobes_state;
+ atomic_long_t hugetlb_usage;
+ struct work_struct async_put_work;
+ long: 64;
+ };
+ long unsigned int cpu_bitmap[0];
+};
+
+union sigval {
+ int sival_int;
+ void *sival_ptr;
+};
+
+typedef union sigval sigval_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 *_addr;
+ union {
+ int _trapno;
+ short int _addr_lsb;
+ struct {
+ char _dummy_bnd[8];
+ void *_lower;
+ void *_upper;
+ } _addr_bnd;
+ struct {
+ char _dummy_pkey[8];
+ __u32 _pkey;
+ } _addr_pkey;
+ struct {
+ long unsigned int _data;
+ __u32 _type;
+ __u32 _flags;
+ } _perf;
+ };
+ } _sigfault;
+ struct {
+ long int _band;
+ int _fd;
+ } _sigpoll;
+ struct {
+ void *_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 rseq {
+ __u32 cpu_id_start;
+ __u32 cpu_id;
+ __u64 rseq_cs;
+ __u32 flags;
+ __u32 node_id;
+ __u32 mm_cid;
+ char end[0];
+};
+
+struct rq_flags;
+
+struct affinity_context;
+
+struct sched_class {
+ void (*enqueue_task)(struct rq *, struct task_struct *, int);
+ bool (*dequeue_task)(struct rq *, struct task_struct *, int);
+ void (*yield_task)(struct rq *);
+ bool (*yield_to_task)(struct rq *, struct task_struct *);
+ void (*wakeup_preempt)(struct rq *, struct task_struct *, int);
+ int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
+ struct task_struct * (*pick_task)(struct rq *);
+ struct task_struct * (*pick_next_task)(struct rq *, struct task_struct *);
+ void (*put_prev_task)(struct rq *, struct task_struct *, struct task_struct *);
+ void (*set_next_task)(struct rq *, struct task_struct *, bool);
+ int (*select_task_rq)(struct task_struct *, int, int);
+ 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 (*switching_to)(struct rq *, struct task_struct *);
+ void (*switched_from)(struct rq *, struct task_struct *);
+ void (*switched_to)(struct rq *, struct task_struct *);
+ void (*reweight_task)(struct rq *, struct task_struct *, const struct load_weight *);
+ 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 unsigned int __kernel_gid32_t;
+
+typedef __kernel_gid32_t gid_t;
+
+typedef struct {
+ gid_t val;
+} kgid_t;
+
+typedef struct {
+ u64 val;
+} kernel_cap_t;
+
+struct user_struct;
+
+struct ucounts;
+
+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 mm_cid {
+ u64 time;
+ int cid;
+};
+
+struct of_device_id {
+ char name[32];
+ char type[32];
+ char compatible[128];
+ const void *data;
+};
+
+typedef signed char __s8;
+
+typedef __s8 s8;
+
+typedef __kernel_long_t __kernel_ssize_t;
+
+typedef long long int __kernel_loff_t;
+
+typedef unsigned int __poll_t;
+
+typedef u32 __kernel_dev_t;
+
+typedef __kernel_dev_t dev_t;
+
+typedef short unsigned int umode_t;
+
+typedef __kernel_loff_t loff_t;
+
+typedef __kernel_ssize_t ssize_t;
+
+typedef s32 int32_t;
+
+typedef u32 uint32_t;
+
+typedef u64 sector_t;
+
+typedef u64 blkcnt_t;
+
+typedef unsigned int gfp_t;
+
+typedef unsigned int fmode_t;
+
+struct lock_class_key {};
+
+struct fs_context;
+
+struct fs_parameter_spec;
+
+struct dentry;
+
+struct super_block;
+
+struct module;
+
+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 qrwlock {
+ union {
+ atomic_t cnts;
+ struct {
+ u8 wlocked;
+ u8 __lstate[3];
+ };
+ };
+ arch_spinlock_t wait_lock;
+};
+
+typedef struct qrwlock arch_rwlock_t;
+
+struct lockdep_map {};
+
+struct ratelimit_state {
+ raw_spinlock_t lock;
+ int interval;
+ int burst;
+ int printed;
+ int missed;
+ unsigned int flags;
+ long unsigned int begin;
+};
+
+typedef unsigned int fop_flags_t;
+
+typedef void *fl_owner_t;
+
+struct kiocb;
+
+struct iov_iter;
+
+struct io_comp_batch;
+
+struct dir_context;
+
+struct poll_table_struct;
+
+struct vm_area_struct;
+
+struct inode;
+
+struct file_lock;
+
+struct file_lease;
+
+struct seq_file;
+
+struct io_uring_cmd;
+
+struct file_operations {
+ struct module *owner;
+ fop_flags_t fop_flags;
+ loff_t (*llseek)(struct file *, loff_t, int);
+ ssize_t (*read)(struct file *, char *, size_t, loff_t *);
+ ssize_t (*write)(struct file *, const char *, 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 int (*unlocked_ioctl)(struct file *, unsigned int, long unsigned int);
+ long int (*compat_ioctl)(struct file *, unsigned int, long unsigned int);
+ int (*mmap)(struct file *, struct vm_area_struct *);
+ 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 *);
+ long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+ 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_lease **, void **);
+ long int (*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 bug_entry {
+ int bug_addr_disp;
+ int file_disp;
+ short unsigned int line;
+ short unsigned int flags;
+};
+
+typedef __s64 time64_t;
+
+struct timespec64 {
+ time64_t tv_sec;
+ long int tv_nsec;
+};
+
+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;
+ u64 subvol;
+ u32 atomic_write_unit_min;
+ u32 atomic_write_unit_max;
+ u32 atomic_write_segments_max;
+};
+
+typedef struct {
+ long unsigned int pte;
+} pte_t;
+
+typedef struct {
+ long unsigned int pgprot;
+} pgprot_t;
+
+typedef struct page *pgtable_t;
+
+struct jump_entry {
+ s32 code;
+ s32 target;
+ long int key;
+};
+
+typedef struct {
+ arch_rwlock_t raw_lock;
+ unsigned int magic;
+ unsigned int owner_cpu;
+ void *owner;
+} rwlock_t;
+
+struct wait_queue_head {
+ spinlock_t lock;
+ struct list_head head;
+};
+
+typedef struct wait_queue_head wait_queue_head_t;
+
+struct seqcount_raw_spinlock {
+ seqcount_t seqcount;
+};
+
+typedef struct seqcount_raw_spinlock seqcount_raw_spinlock_t;
+
+typedef struct {
+ seqcount_spinlock_t seqcount;
+ spinlock_t lock;
+} seqlock_t;
+
+struct kref {
+ refcount_t refcount;
+};
+
+struct workqueue_struct;
+
+struct delayed_work {
+ struct work_struct work;
+ struct timer_list timer;
+ struct workqueue_struct *wq;
+ int cpu;
+};
+
+enum pid_type {
+ PIDTYPE_PID = 0,
+ PIDTYPE_TGID = 1,
+ PIDTYPE_PGID = 2,
+ PIDTYPE_SID = 3,
+ PIDTYPE_MAX = 4,
+};
+
+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 rlimit {
+ __kernel_ulong_t rlim_cur;
+ __kernel_ulong_t rlim_max;
+};
+
+typedef void __signalfn_t(int);
+
+typedef __signalfn_t *__sighandler_t;
+
+struct sigaction {
+ __sighandler_t sa_handler;
+ long unsigned int sa_flags;
+ sigset_t sa_mask;
+};
+
+struct k_sigaction {
+ struct sigaction sa;
+};
+
+struct xarray {
+ spinlock_t xa_lock;
+ gfp_t xa_flags;
+ void *xa_head;
+};
+
+typedef u32 errseq_t;
+
+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;
+ long unsigned int nrpages;
+ long unsigned int writeback_index;
+ const struct address_space_operations *a_ops;
+ long unsigned int flags;
+ errseq_t wb_err;
+ spinlock_t i_private_lock;
+ struct list_head i_private_list;
+ struct rw_semaphore i_mmap_rwsem;
+ void *i_private_data;
+};
+
+struct pid_namespace;
+
+struct upid {
+ int nr;
+ struct pid_namespace *ns;
+};
+
+struct pid {
+ refcount_t count;
+ unsigned int level;
+ spinlock_t lock;
+ struct dentry *stashed;
+ u64 ino;
+ struct hlist_head tasks[4];
+ struct hlist_head inodes;
+ wait_queue_head_t wait_pidfd;
+ struct callback_head rcu;
+ struct upid numbers[0];
+};
+
+typedef int32_t key_serial_t;
+
+typedef uint32_t key_perm_t;
+
+struct key_type;
+
+struct key_tag;
+
+struct keyring_index_key {
+ long unsigned int hash;
+ union {
+ struct {
+ u16 desc_len;
+ char desc[6];
+ };
+ long unsigned int x;
+ };
+ struct key_type *type;
+ struct key_tag *domain_tag;
+ const char *description;
+};
+
+union key_payload {
+ void *rcu_data0;
+ void *data[4];
+};
+
+struct assoc_array_ptr;
+
+struct assoc_array {
+ struct assoc_array_ptr *root;
+ long unsigned int nr_leaves_on_tree;
+};
+
+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;
+ short unsigned int quotalen;
+ short unsigned int datalen;
+ short int state;
+ long unsigned int flags;
+ union {
+ struct keyring_index_key index_key;
+ struct {
+ long unsigned int hash;
+ long unsigned int 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 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 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 hlist_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;
+ long unsigned int nvcsw;
+ long unsigned int nivcsw;
+ long unsigned int cnvcsw;
+ long unsigned int cnivcsw;
+ long unsigned int min_flt;
+ long unsigned int maj_flt;
+ long unsigned int cmin_flt;
+ long unsigned int cmaj_flt;
+ long unsigned int inblock;
+ long unsigned int oublock;
+ long unsigned int cinblock;
+ long unsigned int coublock;
+ long unsigned int maxrss;
+ long unsigned int cmaxrss;
+ struct task_io_accounting ioac;
+ long long unsigned int sum_sched_runtime;
+ struct rlimit rlim[16];
+ unsigned int audit_tty;
+ struct tty_audit_buf *tty_audit_buf;
+ bool oom_flag_origin;
+ short int oom_score_adj;
+ short int oom_score_adj_min;
+ struct mm_struct *oom_mm;
+ struct mutex cred_guard_mutex;
+ struct rw_semaphore exec_update_lock;
+};
+
+struct sighand_struct {
+ spinlock_t siglock;
+ refcount_t count;
+ wait_queue_head_t signalfd_wqh;
+ struct k_sigaction action[64];
+};
+
+struct io_cq;
+
+struct io_context {
+ atomic_long_t refcount;
+ atomic_t active_ref;
+ short unsigned int ioprio;
+ spinlock_t lock;
+ struct xarray icq_tree;
+ struct io_cq *icq_hint;
+ struct hlist_head icq_list;
+ struct work_struct release_work;
+};
+
+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 vmem_altmap {
+ long unsigned int base_pfn;
+ const long unsigned int end_pfn;
+ const long unsigned int reserve;
+ long unsigned int free;
+ long unsigned int align;
+ long unsigned int alloc;
+ bool inaccessible;
+};
+
+struct percpu_ref_data;
+
+struct percpu_ref {
+ long unsigned int percpu_count_ptr;
+ struct percpu_ref_data *data;
+};
+
+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 range {
+ u64 start;
+ u64 end;
+};
+
+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;
+ long unsigned int 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 struct {
+ long unsigned int val;
+} swp_entry_t;
+
+struct folio {
+ union {
+ struct {
+ long unsigned int flags;
+ union {
+ struct list_head lru;
+ struct {
+ void *__filler;
+ unsigned int mlock_count;
+ };
+ };
+ struct address_space *mapping;
+ long unsigned int index;
+ union {
+ void *private;
+ swp_entry_t swap;
+ };
+ atomic_t _mapcount;
+ atomic_t _refcount;
+ long unsigned int memcg_data;
+ };
+ struct page page;
+ };
+ union {
+ struct {
+ long unsigned int _flags_1;
+ long unsigned int _head_1;
+ atomic_t _large_mapcount;
+ atomic_t _entire_mapcount;
+ atomic_t _nr_pages_mapped;
+ atomic_t _pincount;
+ unsigned int _folio_nr_pages;
+ };
+ struct page __page_1;
+ };
+ union {
+ struct {
+ long unsigned int _flags_2;
+ long unsigned int _head_2;
+ void *_hugetlb_subpool;
+ void *_hugetlb_cgroup;
+ void *_hugetlb_cgroup_rsvd;
+ void *_hugetlb_hwpoison;
+ };
+ struct {
+ long unsigned int _flags_2a;
+ long unsigned int _head_2a;
+ struct list_head _deferred_list;
+ };
+ struct page __page_2;
+ };
+};
+
+typedef long unsigned int vm_flags_t;
+
+struct vfsmount;
+
+struct path {
+ struct vfsmount *mnt;
+ struct dentry *dentry;
+};
+
+struct file_ra_state {
+ long unsigned int start;
+ unsigned int size;
+ unsigned int async_size;
+ unsigned int ra_pages;
+ unsigned int mmap_miss;
+ loff_t prev_pos;
+};
+
+typedef struct {
+ long unsigned int v;
+} freeptr_t;
+
+struct fown_struct;
+
+struct file {
+ atomic_long_t f_count;
+ spinlock_t f_lock;
+ fmode_t f_mode;
+ const struct file_operations *f_op;
+ struct address_space *f_mapping;
+ void *private_data;
+ struct inode *f_inode;
+ unsigned int f_flags;
+ unsigned int f_iocb_flags;
+ const struct cred *f_cred;
+ struct path f_path;
+ union {
+ struct mutex f_pos_lock;
+ u64 f_pipe;
+ };
+ loff_t f_pos;
+ void *f_security;
+ struct fown_struct *f_owner;
+ errseq_t f_wb_err;
+ errseq_t f_sb_err;
+ struct hlist_head *f_ep;
+ union {
+ struct callback_head f_task_work;
+ struct llist_node f_llist;
+ struct file_ra_state f_ra;
+ freeptr_t f_freeptr;
+ };
+};
+
+struct vm_userfaultfd_ctx {};
+
+struct vma_lock {
+ struct rw_semaphore lock;
+};
+
+struct anon_vma;
+
+struct vm_operations_struct;
+
+struct vm_area_struct {
+ union {
+ struct {
+ long unsigned int vm_start;
+ long unsigned int 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;
+ long unsigned int rb_subtree_last;
+ } shared;
+ struct list_head anon_vma_chain;
+ struct anon_vma *anon_vma;
+ const struct vm_operations_struct *vm_ops;
+ long unsigned int vm_pgoff;
+ struct file *vm_file;
+ void *vm_private_data;
+ atomic_long_t swap_readahead_info;
+ struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+};
+
+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 *, long unsigned int);
+ int (*mremap)(struct vm_area_struct *);
+ int (*mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int, long unsigned int);
+ 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 *, long unsigned int, long unsigned int);
+ long unsigned int (*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 *, long unsigned int, void *, int, int);
+ const char * (*name)(struct vm_area_struct *);
+ struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
+};
+
+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 {
+ long unsigned int pmd;
+} pmd_t;
+
+typedef struct {
+ long unsigned int pud;
+} pud_t;
+
+struct vm_fault {
+ const struct {
+ struct vm_area_struct *vma;
+ gfp_t gfp_mask;
+ long unsigned int pgoff;
+ long unsigned int address;
+ long unsigned int 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 rcu_segcblist {
+ struct callback_head *head;
+ struct callback_head **tails[4];
+ long unsigned int gp_seq[4];
+ long int len;
+ long int seglen[4];
+ u8 flags;
+};
+
+struct srcu_node;
+
+struct srcu_struct;
+
+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;
+ long unsigned int srcu_gp_seq_needed;
+ long unsigned int 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;
+ long unsigned int grpmask;
+ int cpu;
+ struct srcu_struct *ssp;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct srcu_node {
+ spinlock_t lock;
+ long unsigned int srcu_have_cbs[4];
+ long unsigned int srcu_data_have_cbs[4];
+ long unsigned int srcu_gp_seq_needed_exp;
+ struct srcu_node *srcu_parent;
+ int grplo;
+ int grphi;
+};
+
+struct srcu_usage;
+
+struct srcu_struct {
+ unsigned int srcu_idx;
+ struct srcu_data *sda;
+ struct lockdep_map dep_map;
+ struct srcu_usage *srcu_sup;
+};
+
+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;
+ long unsigned int srcu_gp_seq;
+ long unsigned int srcu_gp_seq_needed;
+ long unsigned int srcu_gp_seq_needed_exp;
+ long unsigned int srcu_gp_start;
+ long unsigned int srcu_last_gp_end;
+ long unsigned int srcu_size_jiffies;
+ long unsigned int srcu_n_lock_retries;
+ long unsigned int srcu_n_exp_nodelay;
+ bool sda_is_static;
+ long unsigned int srcu_barrier_seq;
+ struct mutex srcu_barrier_mutex;
+ struct completion srcu_barrier_completion;
+ atomic_t srcu_barrier_cpu_cnt;
+ long unsigned int reschedule_jiffies;
+ long unsigned int reschedule_count;
+ struct delayed_work work;
+ struct srcu_struct *srcu_ssp;
+};
+
+typedef __u64 Elf64_Addr;
+
+typedef __u16 Elf64_Half;
+
+typedef __u64 Elf64_Off;
+
+typedef __u32 Elf64_Word;
+
+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;
+};
+
+typedef struct elf64_sym Elf64_Sym;
+
+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 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;
+
+struct iovec {
+ void *iov_base;
+ __kernel_size_t iov_len;
+};
+
+struct kvec {
+ void *iov_base;
+ size_t iov_len;
+};
+
+struct bio_vec {
+ struct page *bv_page;
+ unsigned int bv_len;
+ unsigned int bv_offset;
+};
+
+struct folio_batch {
+ unsigned char nr;
+ unsigned char i;
+ bool percpu_pvec_drained;
+ struct folio *folios[31];
+};
+
+struct folio_queue {
+ struct folio_batch vec;
+ u8 orders[31];
+ struct folio_queue *next;
+ struct folio_queue *prev;
+ long unsigned int marks;
+ long unsigned int marks2;
+ long unsigned int marks3;
+};
+
+struct iov_iter {
+ u8 iter_type;
+ bool nofault;
+ bool data_source;
+ size_t iov_offset;
+ union {
+ struct iovec __ubuf_iovec;
+ struct {
+ union {
+ const struct iovec *__iov;
+ const struct kvec *kvec;
+ const struct bio_vec *bvec;
+ const struct folio_queue *folioq;
+ struct xarray *xarray;
+ void *ubuf;
+ };
+ size_t count;
+ };
+ };
+ union {
+ long unsigned int nr_segs;
+ u8 folioq_slot;
+ loff_t xarray_start;
+ };
+};
+
+struct wait_page_queue;
+
+struct kiocb {
+ struct file *ki_filp;
+ loff_t ki_pos;
+ void (*ki_complete)(struct kiocb *, long int);
+ void *private;
+ int ki_flags;
+ u16 ki_ioprio;
+ union {
+ struct wait_page_queue *ki_waitq;
+ ssize_t (*dio_complete)(void *);
+ };
+};
+
+struct hlist_bl_node;
+
+struct hlist_bl_head {
+ struct hlist_bl_node *first;
+};
+
+struct hlist_bl_node {
+ struct hlist_bl_node *next;
+ struct hlist_bl_node **pprev;
+};
+
+struct lockref {
+ union {
+ struct {
+ spinlock_t lock;
+ int count;
+ };
+ };
+};
+
+struct qstr {
+ union {
+ struct {
+ u32 hash;
+ u32 len;
+ };
+ u64 hash_len;
+ };
+ const unsigned char *name;
+};
+
+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[40];
+ const struct dentry_operations *d_op;
+ struct super_block *d_sb;
+ long unsigned int d_time;
+ void *d_fsdata;
+ struct lockref d_lockref;
+ union {
+ struct list_head d_lru;
+ wait_queue_head_t *d_wait;
+ };
+ struct hlist_node d_sib;
+ struct hlist_head d_children;
+ union {
+ struct hlist_node d_alias;
+ struct hlist_bl_node d_in_lookup_hash;
+ struct callback_head d_rcu;
+ } d_u;
+};
+
+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)));
+
+struct posix_acl;
+
+struct inode_operations;
+
+struct bdi_writeback;
+
+struct file_lock_context;
+
+struct cdev;
+
+struct fsnotify_mark_connector;
+
+struct inode {
+ umode_t i_mode;
+ short unsigned int 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;
+ long unsigned int i_ino;
+ union {
+ const unsigned int i_nlink;
+ unsigned int __i_nlink;
+ };
+ dev_t i_rdev;
+ loff_t i_size;
+ time64_t i_atime_sec;
+ time64_t i_mtime_sec;
+ time64_t i_ctime_sec;
+ u32 i_atime_nsec;
+ u32 i_mtime_nsec;
+ u32 i_ctime_nsec;
+ u32 i_generation;
+ spinlock_t i_lock;
+ short unsigned int i_bytes;
+ u8 i_blkbits;
+ enum rw_hint i_write_hint;
+ blkcnt_t i_blocks;
+ u32 i_state;
+ struct rw_semaphore i_rwsem;
+ long unsigned int dirtied_when;
+ long unsigned int 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_fsnotify_mask;
+ struct fsnotify_mark_connector *i_fsnotify_marks;
+ void *i_private;
+};
+
+enum d_real_type {
+ D_REAL_DATA = 0,
+ D_REAL_METADATA = 1,
+};
+
+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 *, enum d_real_type);
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+typedef long long int 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;
+ long unsigned int 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 rcuwait {
+ struct task_struct *task;
+};
+
+struct percpu_rw_semaphore {
+ struct rcu_sync rss;
+ unsigned int *read_count;
+ struct rcuwait writer;
+ wait_queue_head_t waiters;
+ atomic_t block;
+};
+
+struct sb_writers {
+ short unsigned int frozen;
+ int freeze_kcount;
+ int freeze_ucount;
+ struct percpu_rw_semaphore rw_sem[3];
+};
+
+typedef struct {
+ __u8 b[16];
+} uuid_t;
+
+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 super_operations;
+
+struct dquot_operations;
+
+struct quotactl_ops;
+
+struct export_operations;
+
+struct xattr_handler;
+
+struct block_device;
+
+struct backing_dev_info;
+
+struct mtd_info;
+
+struct fsnotify_sb_info;
+
+struct shrinker;
+
+struct super_block {
+ struct list_head s_list;
+ dev_t s_dev;
+ unsigned char s_blocksize_bits;
+ long unsigned int 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;
+ long unsigned int s_flags;
+ long unsigned int s_iflags;
+ long unsigned int 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 * const *s_xattr;
+ struct hlist_bl_head s_roots;
+ struct list_head s_mounts;
+ struct block_device *s_bdev;
+ struct file *s_bdev_file;
+ 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_sb_info *s_fsnotify_info;
+ char s_id[32];
+ uuid_t s_uuid;
+ u8 s_uuid_len;
+ char s_sysfs_name[37];
+ unsigned int s_max_links;
+ struct mutex s_vfs_rename_mutex;
+ const char *s_subtype;
+ const struct dentry_operations *s_d_op;
+ struct shrinker *s_shrink;
+ atomic_long_t s_remove_count;
+ 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: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ 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;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct mnt_idmap;
+
+struct vfsmount {
+ struct dentry *mnt_root;
+ struct super_block *mnt_sb;
+ int mnt_flags;
+ struct mnt_idmap *mnt_idmap;
+};
+
+struct shrink_control {
+ gfp_t gfp_mask;
+ int nid;
+ long unsigned int nr_to_scan;
+ long unsigned int nr_scanned;
+ struct mem_cgroup *memcg;
+};
+
+struct shrinker {
+ long unsigned int (*count_objects)(struct shrinker *, struct shrink_control *);
+ long unsigned int (*scan_objects)(struct shrinker *, struct shrink_control *);
+ long int batch;
+ int seeks;
+ unsigned int flags;
+ refcount_t refcount;
+ struct completion done;
+ struct callback_head rcu;
+ void *private_data;
+ struct list_head list;
+ int id;
+ atomic_long_t *nr_deferred;
+};
+
+struct list_lru_one {
+ struct list_head list;
+ long int nr_items;
+};
+
+struct list_lru_node {
+ spinlock_t lock;
+ struct list_lru_one lru;
+ long int nr_items;
+ long: 64;
+};
+
+enum migrate_mode {
+ MIGRATE_ASYNC = 0,
+ MIGRATE_SYNC_LIGHT = 1,
+ MIGRATE_SYNC = 2,
+};
+
+struct alt_entry {
+ s32 old_offset;
+ s32 alt_offset;
+ u16 vendor_id;
+ u16 alt_len;
+ u32 patch_id;
+};
+
+struct exception_table_entry {
+ int insn;
+ int fixup;
+ short int type;
+ short int data;
+};
+
+struct key_tag {
+ struct callback_head rcu;
+ refcount_t usage;
+ bool removed;
+};
+
+typedef int (*request_key_actor_t)(struct key *, void *);
+
+struct key_preparsed_payload;
+
+struct key_match_data;
+
+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 int (*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 *);
+ struct list_head link;
+ struct lock_class_key lock_class;
+};
+
+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;
+};
+
+struct user_struct {
+ refcount_t __count;
+ struct percpu_counter epoll_watches;
+ long unsigned int unix_inflight;
+ atomic_long_t pipe_bufs;
+ struct hlist_node uidhash_node;
+ kuid_t uid;
+ atomic_long_t locked_vm;
+ struct ratelimit_state ratelimit;
+};
+
+struct group_info {
+ refcount_t usage;
+ int ngroups;
+ kgid_t gid[0];
+};
+
+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;
+ short unsigned int nr_retries;
+ short unsigned int 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;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct hrtimer_clock_base clock_base[8];
+};
+
+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 delayed_call {
+ void (*fn)(void *);
+ void *arg;
+};
+
+struct request_queue;
+
+struct kmem_cache;
+
+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 struct {
+ uid_t val;
+} vfsuid_t;
+
+typedef struct {
+ gid_t val;
+} vfsgid_t;
+
+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 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;
+};
+
+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;
+ long unsigned int dq_flags;
+ struct mem_dqblk dq_dqb;
+};
+
+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 *);
+};
+
+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 *);
+};
+
+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;
+ long long unsigned int ino;
+ blkcnt_t blocks;
+ blkcnt_t nextents;
+};
+
+struct qc_state {
+ unsigned int s_incoredqs;
+ struct qc_type_state s_state[3];
+};
+
+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 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);
+};
+
+enum module_state {
+ MODULE_STATE_LIVE = 0,
+ MODULE_STATE_COMING = 1,
+ MODULE_STATE_GOING = 2,
+ MODULE_STATE_UNFORMED = 3,
+};
+
+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;
+};
+
+struct module_param_attrs;
+
+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_arch_specific {};
+
+struct mod_kallsyms {
+ Elf64_Sym *symtab;
+ unsigned int num_symtab;
+ char *strtab;
+ char *typetab;
+};
+
+struct module_attribute;
+
+struct kernel_symbol;
+
+struct kernel_param;
+
+struct module_sect_attrs;
+
+struct module_notes_attrs;
+
+struct module {
+ enum module_state state;
+ struct list_head list;
+ char name[56];
+ struct module_kobject mkobj;
+ struct module_attribute *modinfo_attrs;
+ const char *version;
+ const char *srcversion;
+ 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 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;
+ long unsigned int taints;
+ unsigned int num_bugs;
+ struct list_head bug_list;
+ struct bug_entry *bug_table;
+ struct mod_kallsyms *kallsyms;
+ struct mod_kallsyms core_kallsyms;
+ struct module_sect_attrs *sect_attrs;
+ struct module_notes_attrs *notes_attrs;
+ char *args;
+ void *percpu;
+ unsigned int percpu_size;
+ void *noinstr_text_start;
+ unsigned int noinstr_text_size;
+ unsigned int num_srcu_structs;
+ struct srcu_struct **srcu_struct_ptrs;
+ unsigned int btf_data_size;
+ unsigned int btf_base_data_size;
+ void *btf_data;
+ void *btf_base_data;
+ struct jump_entry *jump_entries;
+ unsigned int num_jump_entries;
+ struct list_head source_list;
+ struct list_head target_list;
+ void (*exit)();
+ atomic_t refcnt;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct writeback_control;
+
+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 folio **, void **);
+ int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct folio *, 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_folio)(struct address_space *, struct folio *);
+ 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 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 *, 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 fown_struct {
+ struct file *file;
+ rwlock_t lock;
+ struct pid *pid;
+ enum pid_type pid_type;
+ kuid_t uid;
+ kuid_t euid;
+ int signum;
+};
+
+enum freeze_holder {
+ FREEZE_HOLDER_KERNEL = 1,
+ FREEZE_HOLDER_USERSPACE = 2,
+ FREEZE_MAY_NEST = 4,
+};
+
+struct kstatfs;
+
+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 *);
+ long int (*nr_cached_objects)(struct super_block *, struct shrink_control *);
+ long int (*free_cached_objects)(struct super_block *, struct shrink_control *);
+ void (*shutdown)(struct super_block *);
+};
+
+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 *);
+ long unsigned int 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);
+};
+
+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 offset_ctx {
+ struct maple_tree mt;
+ long unsigned int next_offset;
+};
+
+struct p_log;
+
+struct fs_parameter;
+
+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;
+ short unsigned int flags;
+ const void *data;
+};
+
+struct attribute;
+
+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 kernfs_root;
+
+struct kernfs_elem_dir {
+ long unsigned int subdirs;
+ struct rb_root children;
+ struct kernfs_root *root;
+ long unsigned int 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 *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;
+ short unsigned int flags;
+ umode_t mode;
+ union {
+ struct kernfs_elem_dir dir;
+ struct kernfs_elem_symlink symlink;
+ struct kernfs_elem_attr attr;
+ };
+ u64 id;
+ void *priv;
+ struct kernfs_iattrs *iattr;
+ struct callback_head rcu;
+};
+
+struct kernfs_open_file;
+
+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 *);
+ loff_t (*llseek)(struct kernfs_open_file *, loff_t, int);
+};
+
+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;
+};
+
+enum kobj_ns_type {
+ KOBJ_NS_TYPE_NONE = 0,
+ KOBJ_NS_TYPE_NET = 1,
+ KOBJ_NS_TYPES = 2,
+};
+
+struct sock;
+
+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 *);
+};
+
+struct attribute {
+ const char *name;
+ umode_t mode;
+};
+
+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);
+ loff_t (*llseek)(struct file *, struct kobject *, struct bin_attribute *, loff_t, int);
+ int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
+};
+
+struct sysfs_ops {
+ ssize_t (*show)(struct kobject *, struct attribute *, char *);
+ ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_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;
+};
+
+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 *);
+};
+
+struct kobj_uevent_env {
+ char *argv[3];
+ char *envp[64];
+ int envp_idx;
+ char buf[2048];
+ int buflen;
+};
+
+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 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;
+
+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 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 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 {
+ long unsigned int value;
+ const char *name;
+ const char *namespace;
+};
+
+struct dev_pagemap_ops {
+ void (*page_free)(struct page *);
+ vm_fault_t (*migrate_to_ram)(struct vm_fault *);
+ int (*memory_failure)(struct dev_pagemap *, long unsigned int, long unsigned int, int);
+};
+
+struct cpu_manufacturer_info_t {
+ long unsigned int vendor_id;
+ long unsigned int arch_id;
+ long unsigned int imp_id;
+ void (*patch_func)(struct alt_entry *, struct alt_entry *, long unsigned int, long unsigned int, unsigned int);
+};
+
+enum {
+ false = 0,
+ true = 1,
+};
+
+typedef long unsigned int uintptr_t;
+
+typedef int (*initcall_t)();
+
+typedef struct {
+ raw_spinlock_t *lock;
+} class_raw_spinlock_t;
+
+typedef struct {
+ raw_spinlock_t *lock;
+} class_raw_spinlock_irq_t;
+
+typedef struct {
+ raw_spinlock_t *lock;
+ long unsigned int flags;
+} class_raw_spinlock_irqsave_t;
+
+typedef struct {
+ spinlock_t *lock;
+} class_spinlock_t;
+
+typedef struct {
+ spinlock_t *lock;
+} class_spinlock_irq_t;
+
+typedef struct {
+ spinlock_t *lock;
+ long unsigned int flags;
+} class_spinlock_irqsave_t;
+
+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 {
+ MM_FILEPAGES = 0,
+ MM_ANONPAGES = 1,
+ MM_SWAPENTS = 2,
+ MM_SHMEMPAGES = 3,
+ NR_MM_COUNTERS = 4,
+};
+
+enum work_bits {
+ WORK_STRUCT_PENDING_BIT = 0,
+ WORK_STRUCT_INACTIVE_BIT = 1,
+ WORK_STRUCT_PWQ_BIT = 2,
+ WORK_STRUCT_LINKED_BIT = 3,
+ WORK_STRUCT_FLAG_BITS = 4,
+ WORK_STRUCT_COLOR_SHIFT = 4,
+ WORK_STRUCT_COLOR_BITS = 4,
+ WORK_STRUCT_PWQ_SHIFT = 8,
+ WORK_OFFQ_FLAG_SHIFT = 4,
+ WORK_OFFQ_BH_BIT = 4,
+ WORK_OFFQ_FLAG_END = 5,
+ WORK_OFFQ_FLAG_BITS = 1,
+ WORK_OFFQ_DISABLE_SHIFT = 5,
+ WORK_OFFQ_DISABLE_BITS = 16,
+ WORK_OFFQ_POOL_SHIFT = 21,
+ WORK_OFFQ_LEFT = 43,
+ WORK_OFFQ_POOL_BITS = 31,
+};
+
+enum rseq_cs_flags_bit {
+ RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
+ RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
+ RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
+};
+
+enum {
+ TASK_COMM_LEN = 16,
+};
+
+enum pcpu_fc {
+ PCPU_FC_AUTO = 0,
+ PCPU_FC_EMBED = 1,
+ PCPU_FC_PAGE = 2,
+ PCPU_FC_NR = 3,
+};
+
+enum migratetype {
+ MIGRATE_UNMOVABLE = 0,
+ MIGRATE_MOVABLE = 1,
+ MIGRATE_RECLAIMABLE = 2,
+ MIGRATE_PCPTYPES = 3,
+ MIGRATE_HIGHATOMIC = 3,
+ MIGRATE_TYPES = 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_FREE_CMA_PAGES = 9,
+ NR_VM_ZONE_STAT_ITEMS = 10,
+};
+
+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_IOMMU_PAGES = 40,
+ NR_SWAPCACHE = 41,
+ PGDEMOTE_KSWAPD = 42,
+ PGDEMOTE_DIRECT = 43,
+ PGDEMOTE_KHUGEPAGED = 44,
+ NR_VM_NODE_STAT_ITEMS = 45,
+};
+
+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 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_watermarks {
+ WMARK_MIN = 0,
+ WMARK_LOW = 1,
+ WMARK_HIGH = 2,
+ WMARK_PROMO = 3,
+ NR_WMARK = 4,
+};
+
+enum {
+ ZONELIST_FALLBACK = 0,
+ MAX_ZONELISTS = 1,
+};
+
+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 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;
+};
+
+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_CLUSTER = 8,
+ __SD_SHARE_LLC = 9,
+ __SD_SERIALIZE = 10,
+ __SD_ASYM_PACKING = 11,
+ __SD_PREFER_SIBLING = 12,
+ __SD_OVERLAP = 13,
+ __SD_NUMA = 14,
+ __SD_FLAG_CNT = 15,
+};
+
+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 pm_message {
+ int event;
+};
+
+typedef struct pm_message pm_message_t;
+
+struct device;
+
+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 *);
+};
+
+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;
+};
+
+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;
+ bool can_wakeup: 1;
+ bool 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;
+ bool async_in_progress: 1;
+ bool must_resume: 1;
+ bool 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;
+ bool idle_notification: 1;
+ bool request_pending: 1;
+ bool deferred_resume: 1;
+ bool needs_force_resume: 1;
+ bool runtime_auto: 1;
+ bool ignore_children: 1;
+ bool no_callbacks: 1;
+ bool irq_safe: 1;
+ bool use_autosuspend: 1;
+ bool timer_autosuspends: 1;
+ bool 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;
+};
+
+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 dev_pin_info;
+
+struct bus_dma_region;
+
+struct device_dma_parameters;
+
+struct dma_coherent_mem;
+
+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_pin_info *pins;
+ struct dev_msi_info msi;
+ 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 io_tlb_mem *dma_io_tlb_mem;
+ 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;
+ bool dma_skip_sync: 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 wakeup_source {
+ const char *name;
+ int id;
+ struct list_head entry;
+ spinlock_t lock;
+ struct wake_irq *wakeirq;
+ struct timer_list timer;
+ long unsigned int timer_expires;
+ ktime_t total_time;
+ ktime_t max_time;
+ ktime_t last_time;
+ ktime_t start_prevent_time;
+ ktime_t prevent_sleep_time;
+ long unsigned int event_count;
+ long unsigned int active_count;
+ long unsigned int relax_count;
+ long unsigned int expire_count;
+ long unsigned int wakeup_count;
+ struct device *dev;
+ bool active: 1;
+ bool autosleep_enabled: 1;
+};
+
+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);
+};
+
+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 *, const 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;
+ bool need_parent_lock;
+};
+
+enum probe_type {
+ PROBE_DEFAULT_STRATEGY = 0,
+ PROBE_PREFER_ASYNCHRONOUS = 1,
+ PROBE_FORCE_SYNCHRONOUS = 2,
+};
+
+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;
+};
+
+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;
+};
+
+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 riscv_cpuinfo {
+ long unsigned int mvendorid;
+ long unsigned int marchid;
+ long unsigned int mimpid;
+};
+
+struct riscv_isainfo {
+ long unsigned int isa[2];
+};
+
+struct riscv_isa_ext_data {
+ const unsigned int id;
+ const char *name;
+ const char *property;
+ const unsigned int *subset_ext_ids;
+ const unsigned int subset_ext_size;
+ int (*validate)(const struct riscv_isa_ext_data *, const long unsigned int *);
+};
+
+enum {
+ DQF_ROOT_SQUASH_B = 0,
+ DQF_SYS_FILE_B = 16,
+ DQF_PRIVATE = 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 {
+ SB_UNFROZEN = 0,
+ SB_FREEZE_WRITE = 1,
+ SB_FREEZE_PAGEFAULT = 2,
+ SB_FREEZE_FS = 3,
+ SB_FREEZE_COMPLETE = 4,
+};
+
+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 long unsigned int kernel_ulong_t;
+
+struct acpi_device_id {
+ __u8 id[16];
+ kernel_ulong_t driver_data;
+ __u32 cls;
+ __u32 cls_msk;
+};
+
+struct device_dma_parameters {
+ unsigned int max_segment_size;
+ unsigned int min_align_mask;
+ long unsigned int segment_boundary_mask;
+};
+
+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;
+};
+
+typedef u64 phys_addr_t;
+
+typedef u64 dma_addr_t;
+
+struct bus_dma_region {
+ phys_addr_t cpu_start;
+ dma_addr_t dma_start;
+ u64 size;
+};
+
+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;
+};
+
+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;
+ long unsigned int _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_endpoint {
+ unsigned int port;
+ unsigned int id;
+ const struct fwnode_handle *local_fwnode;
+};
+
+struct fwnode_reference_args {
+ struct fwnode_handle *fwnode;
+ unsigned int nargs;
+ u64 args[8];
+};
+
+enum acpi_device_swnode_dev_props {
+ ACPI_DEVICE_SWNODE_DEV_ROTATION = 0,
+ ACPI_DEVICE_SWNODE_DEV_CLOCK_FREQUENCY = 1,
+ ACPI_DEVICE_SWNODE_DEV_LED_MAX_MICROAMP = 2,
+ ACPI_DEVICE_SWNODE_DEV_FLASH_MAX_MICROAMP = 3,
+ ACPI_DEVICE_SWNODE_DEV_FLASH_MAX_TIMEOUT_US = 4,
+ ACPI_DEVICE_SWNODE_DEV_NUM_OF = 5,
+ ACPI_DEVICE_SWNODE_DEV_NUM_ENTRIES = 6,
+};
+
+enum acpi_device_swnode_port_props {
+ ACPI_DEVICE_SWNODE_PORT_REG = 0,
+ ACPI_DEVICE_SWNODE_PORT_NUM_OF = 1,
+ ACPI_DEVICE_SWNODE_PORT_NUM_ENTRIES = 2,
+};
+
+enum acpi_device_swnode_ep_props {
+ ACPI_DEVICE_SWNODE_EP_REMOTE_EP = 0,
+ ACPI_DEVICE_SWNODE_EP_BUS_TYPE = 1,
+ ACPI_DEVICE_SWNODE_EP_REG = 2,
+ ACPI_DEVICE_SWNODE_EP_CLOCK_LANES = 3,
+ ACPI_DEVICE_SWNODE_EP_DATA_LANES = 4,
+ ACPI_DEVICE_SWNODE_EP_LANE_POLARITIES = 5,
+ ACPI_DEVICE_SWNODE_EP_LINK_FREQUENCIES = 6,
+ ACPI_DEVICE_SWNODE_EP_NUM_OF = 7,
+ ACPI_DEVICE_SWNODE_EP_NUM_ENTRIES = 8,
+};
+
+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_MCE_DEAD = 8,
+ CPUHP_VIRT_NET_DEAD = 9,
+ CPUHP_IBMVNIC_DEAD = 10,
+ CPUHP_SLUB_DEAD = 11,
+ CPUHP_DEBUG_OBJ_DEAD = 12,
+ CPUHP_MM_WRITEBACK_DEAD = 13,
+ CPUHP_MM_VMSTAT_DEAD = 14,
+ CPUHP_SOFTIRQ_DEAD = 15,
+ CPUHP_NET_MVNETA_DEAD = 16,
+ CPUHP_CPUIDLE_DEAD = 17,
+ CPUHP_ARM64_FPSIMD_DEAD = 18,
+ CPUHP_ARM_OMAP_WAKE_DEAD = 19,
+ CPUHP_IRQ_POLL_DEAD = 20,
+ CPUHP_BLOCK_SOFTIRQ_DEAD = 21,
+ CPUHP_BIO_DEAD = 22,
+ CPUHP_ACPI_CPUDRV_DEAD = 23,
+ CPUHP_S390_PFAULT_DEAD = 24,
+ CPUHP_BLK_MQ_DEAD = 25,
+ CPUHP_FS_BUFF_DEAD = 26,
+ CPUHP_PRINTK_DEAD = 27,
+ CPUHP_MM_MEMCQ_DEAD = 28,
+ CPUHP_PERCPU_CNT_DEAD = 29,
+ CPUHP_RADIX_DEAD = 30,
+ CPUHP_PAGE_ALLOC = 31,
+ CPUHP_NET_DEV_DEAD = 32,
+ CPUHP_PCI_XGENE_DEAD = 33,
+ CPUHP_IOMMU_IOVA_DEAD = 34,
+ CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 35,
+ CPUHP_PADATA_DEAD = 36,
+ CPUHP_AP_DTPM_CPU_DEAD = 37,
+ CPUHP_RANDOM_PREPARE = 38,
+ CPUHP_WORKQUEUE_PREP = 39,
+ CPUHP_POWER_NUMA_PREPARE = 40,
+ CPUHP_HRTIMERS_PREPARE = 41,
+ CPUHP_X2APIC_PREPARE = 42,
+ CPUHP_SMPCFD_PREPARE = 43,
+ CPUHP_RELAY_PREPARE = 44,
+ CPUHP_MD_RAID5_PREPARE = 45,
+ CPUHP_RCUTREE_PREP = 46,
+ CPUHP_CPUIDLE_COUPLED_PREPARE = 47,
+ CPUHP_POWERPC_PMAC_PREPARE = 48,
+ CPUHP_POWERPC_MMU_CTX_PREPARE = 49,
+ CPUHP_XEN_PREPARE = 50,
+ CPUHP_XEN_EVTCHN_PREPARE = 51,
+ CPUHP_ARM_SHMOBILE_SCU_PREPARE = 52,
+ CPUHP_SH_SH3X_PREPARE = 53,
+ CPUHP_TOPOLOGY_PREPARE = 54,
+ CPUHP_NET_IUCV_PREPARE = 55,
+ CPUHP_ARM_BL_PREPARE = 56,
+ CPUHP_TRACE_RB_PREPARE = 57,
+ CPUHP_MM_ZS_PREPARE = 58,
+ CPUHP_MM_ZSWP_POOL_PREPARE = 59,
+ CPUHP_KVM_PPC_BOOK3S_PREPARE = 60,
+ CPUHP_ZCOMP_PREPARE = 61,
+ CPUHP_TIMERS_PREPARE = 62,
+ CPUHP_TMIGR_PREPARE = 63,
+ CPUHP_MIPS_SOC_PREPARE = 64,
+ CPUHP_BP_PREPARE_DYN = 65,
+ CPUHP_BP_PREPARE_DYN_END = 85,
+ CPUHP_BP_KICK_AP = 86,
+ CPUHP_BRINGUP_CPU = 87,
+ CPUHP_AP_IDLE_DEAD = 88,
+ CPUHP_AP_OFFLINE = 89,
+ CPUHP_AP_CACHECTRL_STARTING = 90,
+ CPUHP_AP_SCHED_STARTING = 91,
+ CPUHP_AP_RCUTREE_DYING = 92,
+ CPUHP_AP_CPU_PM_STARTING = 93,
+ CPUHP_AP_IRQ_GIC_STARTING = 94,
+ CPUHP_AP_IRQ_HIP04_STARTING = 95,
+ CPUHP_AP_IRQ_APPLE_AIC_STARTING = 96,
+ CPUHP_AP_IRQ_ARMADA_XP_STARTING = 97,
+ CPUHP_AP_IRQ_BCM2836_STARTING = 98,
+ CPUHP_AP_IRQ_MIPS_GIC_STARTING = 99,
+ CPUHP_AP_IRQ_EIOINTC_STARTING = 100,
+ CPUHP_AP_IRQ_AVECINTC_STARTING = 101,
+ CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 102,
+ CPUHP_AP_IRQ_RISCV_IMSIC_STARTING = 103,
+ CPUHP_AP_IRQ_RISCV_SBI_IPI_STARTING = 104,
+ CPUHP_AP_ARM_MVEBU_COHERENCY = 105,
+ CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 106,
+ CPUHP_AP_PERF_X86_STARTING = 107,
+ CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 108,
+ CPUHP_AP_PERF_XTENSA_STARTING = 109,
+ CPUHP_AP_ARM_VFP_STARTING = 110,
+ CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 111,
+ CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 112,
+ CPUHP_AP_PERF_ARM_ACPI_STARTING = 113,
+ CPUHP_AP_PERF_ARM_STARTING = 114,
+ CPUHP_AP_PERF_RISCV_STARTING = 115,
+ CPUHP_AP_ARM_L2X0_STARTING = 116,
+ CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 117,
+ CPUHP_AP_ARM_ARCH_TIMER_STARTING = 118,
+ CPUHP_AP_ARM_ARCH_TIMER_EVTSTRM_STARTING = 119,
+ CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 120,
+ CPUHP_AP_JCORE_TIMER_STARTING = 121,
+ CPUHP_AP_ARM_TWD_STARTING = 122,
+ CPUHP_AP_QCOM_TIMER_STARTING = 123,
+ CPUHP_AP_TEGRA_TIMER_STARTING = 124,
+ CPUHP_AP_ARMADA_TIMER_STARTING = 125,
+ CPUHP_AP_MIPS_GIC_TIMER_STARTING = 126,
+ CPUHP_AP_ARC_TIMER_STARTING = 127,
+ CPUHP_AP_REALTEK_TIMER_STARTING = 128,
+ CPUHP_AP_RISCV_TIMER_STARTING = 129,
+ CPUHP_AP_CLINT_TIMER_STARTING = 130,
+ CPUHP_AP_CSKY_TIMER_STARTING = 131,
+ CPUHP_AP_TI_GP_TIMER_STARTING = 132,
+ CPUHP_AP_HYPERV_TIMER_STARTING = 133,
+ CPUHP_AP_DUMMY_TIMER_STARTING = 134,
+ CPUHP_AP_ARM_XEN_STARTING = 135,
+ CPUHP_AP_ARM_XEN_RUNSTATE_STARTING = 136,
+ CPUHP_AP_ARM_CORESIGHT_STARTING = 137,
+ CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 138,
+ CPUHP_AP_ARM64_ISNDEP_STARTING = 139,
+ CPUHP_AP_SMPCFD_DYING = 140,
+ CPUHP_AP_HRTIMERS_DYING = 141,
+ CPUHP_AP_TICK_DYING = 142,
+ CPUHP_AP_X86_TBOOT_DYING = 143,
+ CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 144,
+ CPUHP_AP_ONLINE = 145,
+ CPUHP_TEARDOWN_CPU = 146,
+ CPUHP_AP_ONLINE_IDLE = 147,
+ CPUHP_AP_HYPERV_ONLINE = 148,
+ CPUHP_AP_KVM_ONLINE = 149,
+ CPUHP_AP_SCHED_WAIT_EMPTY = 150,
+ CPUHP_AP_SMPBOOT_THREADS = 151,
+ CPUHP_AP_IRQ_AFFINITY_ONLINE = 152,
+ CPUHP_AP_BLK_MQ_ONLINE = 153,
+ CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 154,
+ CPUHP_AP_X86_INTEL_EPB_ONLINE = 155,
+ CPUHP_AP_PERF_ONLINE = 156,
+ CPUHP_AP_PERF_X86_ONLINE = 157,
+ CPUHP_AP_PERF_X86_UNCORE_ONLINE = 158,
+ CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 159,
+ CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 160,
+ CPUHP_AP_PERF_X86_RAPL_ONLINE = 161,
+ CPUHP_AP_PERF_S390_CF_ONLINE = 162,
+ CPUHP_AP_PERF_S390_SF_ONLINE = 163,
+ CPUHP_AP_PERF_ARM_CCI_ONLINE = 164,
+ CPUHP_AP_PERF_ARM_CCN_ONLINE = 165,
+ CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE = 166,
+ CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 167,
+ CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 168,
+ CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 169,
+ CPUHP_AP_PERF_ARM_HISI_PA_ONLINE = 170,
+ CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE = 171,
+ CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE = 172,
+ CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE = 173,
+ CPUHP_AP_PERF_ARM_L2X0_ONLINE = 174,
+ CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 175,
+ CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 176,
+ CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 177,
+ CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 178,
+ CPUHP_AP_PERF_ARM_MARVELL_CN10K_DDR_ONLINE = 179,
+ CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 180,
+ CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 181,
+ CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 182,
+ CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 183,
+ CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 184,
+ CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 185,
+ CPUHP_AP_PERF_CSKY_ONLINE = 186,
+ CPUHP_AP_TMIGR_ONLINE = 187,
+ CPUHP_AP_WATCHDOG_ONLINE = 188,
+ CPUHP_AP_WORKQUEUE_ONLINE = 189,
+ CPUHP_AP_RANDOM_ONLINE = 190,
+ CPUHP_AP_RCUTREE_ONLINE = 191,
+ CPUHP_AP_BASE_CACHEINFO_ONLINE = 192,
+ CPUHP_AP_ONLINE_DYN = 193,
+ CPUHP_AP_ONLINE_DYN_END = 233,
+ CPUHP_AP_X86_HPET_ONLINE = 234,
+ CPUHP_AP_X86_KVM_CLK_ONLINE = 235,
+ CPUHP_AP_ACTIVE = 236,
+ CPUHP_ONLINE = 237,
+};
+
+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 *);
+};
+
+struct property {
+ char *name;
+ int length;
+ void *value;
+ struct property *next;
+ struct bin_attribute attr;
+};
+
+struct riscv_isavendorinfo {
+ long unsigned int isa[1];
+};
+
+struct riscv_isa_vendor_ext_data_list {
+ bool is_initialized;
+ const size_t ext_data_count;
+ const struct riscv_isa_ext_data *ext_data;
+ struct riscv_isavendorinfo per_hart_isa_bitmap[64];
+ struct riscv_isavendorinfo all_harts_isa_bitmap;
+};
+
+typedef u32 acpi_status;
+
+typedef char *acpi_string;
+
+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;
+};
+
+enum vm_event_item {
+ PGPGIN = 0,
+ PGPGOUT = 1,
+ PSWPIN = 2,
+ PSWPOUT = 3,
+ PGALLOC_DMA32 = 4,
+ PGALLOC_NORMAL = 5,
+ PGALLOC_MOVABLE = 6,
+ ALLOCSTALL_DMA32 = 7,
+ ALLOCSTALL_NORMAL = 8,
+ ALLOCSTALL_MOVABLE = 9,
+ PGSCAN_SKIP_DMA32 = 10,
+ PGSCAN_SKIP_NORMAL = 11,
+ PGSCAN_SKIP_MOVABLE = 12,
+ PGFREE = 13,
+ PGACTIVATE = 14,
+ PGDEACTIVATE = 15,
+ PGLAZYFREE = 16,
+ PGFAULT = 17,
+ PGMAJFAULT = 18,
+ PGLAZYFREED = 19,
+ PGREFILL = 20,
+ PGREUSE = 21,
+ PGSTEAL_KSWAPD = 22,
+ PGSTEAL_DIRECT = 23,
+ PGSTEAL_KHUGEPAGED = 24,
+ PGSCAN_KSWAPD = 25,
+ PGSCAN_DIRECT = 26,
+ PGSCAN_KHUGEPAGED = 27,
+ PGSCAN_DIRECT_THROTTLE = 28,
+ PGSCAN_ANON = 29,
+ PGSCAN_FILE = 30,
+ PGSTEAL_ANON = 31,
+ PGSTEAL_FILE = 32,
+ PGINODESTEAL = 33,
+ SLABS_SCANNED = 34,
+ KSWAPD_INODESTEAL = 35,
+ KSWAPD_LOW_WMARK_HIT_QUICKLY = 36,
+ KSWAPD_HIGH_WMARK_HIT_QUICKLY = 37,
+ PAGEOUTRUN = 38,
+ PGROTATED = 39,
+ DROP_PAGECACHE = 40,
+ DROP_SLAB = 41,
+ OOM_KILL = 42,
+ PGMIGRATE_SUCCESS = 43,
+ PGMIGRATE_FAIL = 44,
+ THP_MIGRATION_SUCCESS = 45,
+ THP_MIGRATION_FAIL = 46,
+ THP_MIGRATION_SPLIT = 47,
+ COMPACTMIGRATE_SCANNED = 48,
+ COMPACTFREE_SCANNED = 49,
+ COMPACTISOLATED = 50,
+ COMPACTSTALL = 51,
+ COMPACTFAIL = 52,
+ COMPACTSUCCESS = 53,
+ KCOMPACTD_WAKE = 54,
+ KCOMPACTD_MIGRATE_SCANNED = 55,
+ KCOMPACTD_FREE_SCANNED = 56,
+ HTLB_BUDDY_PGALLOC = 57,
+ HTLB_BUDDY_PGALLOC_FAIL = 58,
+ UNEVICTABLE_PGCULLED = 59,
+ UNEVICTABLE_PGSCANNED = 60,
+ UNEVICTABLE_PGRESCUED = 61,
+ UNEVICTABLE_PGMLOCKED = 62,
+ UNEVICTABLE_PGMUNLOCKED = 63,
+ UNEVICTABLE_PGCLEARED = 64,
+ UNEVICTABLE_PGSTRANDED = 65,
+ BALLOON_INFLATE = 66,
+ BALLOON_DEFLATE = 67,
+ BALLOON_MIGRATE = 68,
+ SWAP_RA = 69,
+ SWAP_RA_HIT = 70,
+ SWPIN_ZERO = 71,
+ SWPOUT_ZERO = 72,
+ NR_VM_EVENT_ITEMS = 73,
+};
+
+typedef long unsigned int ulong;
+
+typedef long unsigned int irq_hw_number_t;
+
+enum irqreturn {
+ IRQ_NONE = 0,
+ IRQ_HANDLED = 1,
+ IRQ_WAKE_THREAD = 2,
+};
+
+typedef enum irqreturn irqreturn_t;
+
+struct codetag {
+ unsigned int flags;
+ unsigned int lineno;
+ const char *modname;
+ const char *function;
+ const char *filename;
+};
+
+struct pt_regs {
+ long unsigned int epc;
+ long unsigned int ra;
+ long unsigned int sp;
+ long unsigned int gp;
+ long unsigned int tp;
+ long unsigned int t0;
+ long unsigned int t1;
+ long unsigned int t2;
+ long unsigned int s0;
+ long unsigned int s1;
+ long unsigned int a0;
+ long unsigned int a1;
+ long unsigned int a2;
+ long unsigned int a3;
+ long unsigned int a4;
+ long unsigned int a5;
+ long unsigned int a6;
+ long unsigned int a7;
+ long unsigned int s2;
+ long unsigned int s3;
+ long unsigned int s4;
+ long unsigned int s5;
+ long unsigned int s6;
+ long unsigned int s7;
+ long unsigned int s8;
+ long unsigned int s9;
+ long unsigned int s10;
+ long unsigned int s11;
+ long unsigned int t3;
+ long unsigned int t4;
+ long unsigned int t5;
+ long unsigned int t6;
+ long unsigned int status;
+ long unsigned int badaddr;
+ long unsigned int cause;
+ long unsigned int orig_a0;
+};
+
+typedef struct cpumask cpumask_var_t[1];
+
+enum {
+ ___GFP_DMA_BIT = 0,
+ ___GFP_HIGHMEM_BIT = 1,
+ ___GFP_DMA32_BIT = 2,
+ ___GFP_MOVABLE_BIT = 3,
+ ___GFP_RECLAIMABLE_BIT = 4,
+ ___GFP_HIGH_BIT = 5,
+ ___GFP_IO_BIT = 6,
+ ___GFP_FS_BIT = 7,
+ ___GFP_ZERO_BIT = 8,
+ ___GFP_UNUSED_BIT = 9,
+ ___GFP_DIRECT_RECLAIM_BIT = 10,
+ ___GFP_KSWAPD_RECLAIM_BIT = 11,
+ ___GFP_WRITE_BIT = 12,
+ ___GFP_NOWARN_BIT = 13,
+ ___GFP_RETRY_MAYFAIL_BIT = 14,
+ ___GFP_NOFAIL_BIT = 15,
+ ___GFP_NORETRY_BIT = 16,
+ ___GFP_MEMALLOC_BIT = 17,
+ ___GFP_COMP_BIT = 18,
+ ___GFP_NOMEMALLOC_BIT = 19,
+ ___GFP_HARDWALL_BIT = 20,
+ ___GFP_THISNODE_BIT = 21,
+ ___GFP_ACCOUNT_BIT = 22,
+ ___GFP_ZEROTAGS_BIT = 23,
+ ___GFP_NO_OBJ_EXT_BIT = 24,
+ ___GFP_LAST_BIT = 25,
+};
+
+struct alloc_tag_counters {
+ u64 bytes;
+ u64 calls;
+};
+
+struct alloc_tag {
+ struct codetag ct;
+ struct alloc_tag_counters *counters;
+};
+
+struct vm_struct {
+ struct vm_struct *next;
+ void *addr;
+ long unsigned int size;
+ long unsigned int flags;
+ struct page **pages;
+ unsigned int page_order;
+ unsigned int nr_pages;
+ phys_addr_t phys_addr;
+ const void *caller;
+};
+
+struct irq_desc;
+
+typedef void (*irq_flow_handler_t)(struct irq_desc *);
+
+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;
+ irq_hw_number_t hwirq;
+ struct irq_common_data *common;
+ struct irq_chip *chip;
+ struct irq_domain *domain;
+ struct irq_data *parent_data;
+ void *chip_data;
+};
+
+struct irqstat;
+
+struct irqaction;
+
+struct irq_affinity_notify;
+
+struct proc_dir_entry;
+
+struct irq_desc {
+ struct irq_common_data irq_common_data;
+ struct irq_data irq_data;
+ struct irqstat *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;
+ long unsigned int 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;
+ long unsigned int 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;
+ long: 64;
+ long: 64;
+};
+
+enum irqchip_irq_state {
+ IRQCHIP_STATE_PENDING = 0,
+ IRQCHIP_STATE_ACTIVE = 1,
+ IRQCHIP_STATE_MASKED = 2,
+ IRQCHIP_STATE_LINE_LEVEL = 3,
+};
+
+struct msi_msg;
+
+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 *);
+ long unsigned int flags;
+};
+
+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_DEVICE_MSI = 15,
+ DOMAIN_BUS_WIRED_TO_MSI = 16,
+};
+
+struct irq_domain_ops;
+
+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;
+ void (*exit)(struct irq_domain *);
+ irq_hw_number_t hwirq_max;
+ unsigned int revmap_size;
+ struct xarray revmap_tree;
+ struct irq_data *revmap[0];
+};
+
+struct irqstat {
+ unsigned int cnt;
+};
+
+typedef irqreturn_t (*irq_handler_t)(int, void *);
+
+struct irqaction {
+ irq_handler_t handler;
+ void *dev_id;
+ void *percpu_dev_id;
+ struct irqaction *next;
+ irq_handler_t thread_fn;
+ struct task_struct *thread;
+ struct irqaction *secondary;
+ unsigned int irq;
+ unsigned int flags;
+ long unsigned int thread_flags;
+ long unsigned int 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 irq_chip_regs {
+ long unsigned int enable;
+ long unsigned int disable;
+ long unsigned int mask;
+ long unsigned int ack;
+ long unsigned int eoi;
+ long unsigned int type;
+};
+
+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 wake_enabled;
+ u32 wake_active;
+ unsigned int num_ct;
+ void *private;
+ long unsigned int installed;
+ long unsigned int unused;
+ struct irq_domain *domain;
+ struct list_head list;
+ struct irq_chip_type chip_types[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_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;
+ void (*exit)(struct irq_chip_generic *);
+ struct irq_chip_generic *gc[0];
+};
+
+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,
+};
+
+struct irq_fwspec {
+ struct fwnode_handle *fwnode;
+ int param_count;
+ u32 param[16];
+};
+
+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, long unsigned int *, 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 *, long unsigned int *, unsigned int *);
+};
+
+struct msi_domain_info;
+
+struct msi_parent_ops {
+ u32 supported_flags;
+ u32 required_flags;
+ u32 bus_select_token;
+ u32 bus_select_mask;
+ const char *prefix;
+ bool (*init_dev_msi_info)(struct device *, struct irq_domain *, struct irq_domain *, struct msi_domain_info *);
+};
+
+struct idr {
+ struct xarray idr_rt;
+ unsigned int idr_base;
+ unsigned int idr_next;
+};
+
+struct proc_ns_operations;
+
+struct ns_common {
+ struct dentry *stashed;
+ const struct proc_ns_operations *ops;
+ unsigned int inum;
+ refcount_t count;
+};
+
+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 uts_namespace;
+
+struct ipc_namespace;
+
+struct mnt_namespace;
+
+struct net;
+
+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;
+};
+
+typedef __u32 Elf32_Addr;
+
+typedef __u16 Elf32_Half;
+
+typedef __u32 Elf32_Off;
+
+typedef __u32 Elf32_Word;
+
+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;
+};
+
+typedef struct elf32_hdr Elf32_Ehdr;
+
+struct cgroup;
+
+struct kernel_clone_args {
+ u64 flags;
+ int *pidfd;
+ int *child_tid;
+ int *parent_tid;
+ const char *name;
+ int exit_signal;
+ u32 kthread: 1;
+ u32 io_thread: 1;
+ u32 user_worker: 1;
+ u32 no_files: 1;
+ long unsigned int stack;
+ long unsigned int stack_size;
+ long unsigned int 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 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 *);
+};
+
+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,
+};
+
+struct __riscv_v_regset_state {
+ long unsigned int vstart;
+ long unsigned int vl;
+ long unsigned int vtype;
+ long unsigned int vcsr;
+ long unsigned int vlenb;
+ char vreg[0];
+};
+
+typedef u32 compat_ulong_t;
+
+struct compat_user_regs_struct {
+ compat_ulong_t pc;
+ compat_ulong_t ra;
+ compat_ulong_t sp;
+ compat_ulong_t gp;
+ compat_ulong_t tp;
+ compat_ulong_t t0;
+ compat_ulong_t t1;
+ compat_ulong_t t2;
+ compat_ulong_t s0;
+ compat_ulong_t s1;
+ compat_ulong_t a0;
+ compat_ulong_t a1;
+ compat_ulong_t a2;
+ compat_ulong_t a3;
+ compat_ulong_t a4;
+ compat_ulong_t a5;
+ compat_ulong_t a6;
+ compat_ulong_t a7;
+ compat_ulong_t s2;
+ compat_ulong_t s3;
+ compat_ulong_t s4;
+ compat_ulong_t s5;
+ compat_ulong_t s6;
+ compat_ulong_t s7;
+ compat_ulong_t s8;
+ compat_ulong_t s9;
+ compat_ulong_t s10;
+ compat_ulong_t s11;
+ compat_ulong_t t3;
+ compat_ulong_t t4;
+ compat_ulong_t t5;
+ compat_ulong_t t6;
+};
+
+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 membuf {
+ void *p;
+ size_t left;
+};
+
+struct user_regset;
+
+typedef int user_regset_active_fn(struct task_struct *, const 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 *);
+
+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 user_regset_view {
+ const char *name;
+ const struct user_regset *regsets;
+ unsigned int n;
+ u32 e_flags;
+ u16 e_machine;
+ u8 ei_osabi;
+};
+
+enum riscv_regset {
+ REGSET_X = 0,
+ REGSET_F = 1,
+ REGSET_V = 2,
+};
+
+struct pt_regs_offset {
+ const char *name;
+ int offset;
+};
+
+typedef bool (*stack_trace_consume_fn)(void *, long unsigned int);
+
+struct return_address_data {
+ unsigned int level;
+ void *addr;
+};
+
+typedef phys_addr_t resource_size_t;
+
+struct resource {
+ resource_size_t start;
+ resource_size_t end;
+ const char *name;
+ long unsigned int flags;
+ long unsigned int desc;
+ struct resource *parent;
+ struct resource *sibling;
+ struct resource *child;
+};
+
+struct cacheline_padding {
+ char x[0];
+};
+
+struct pollfd {
+ int fd;
+ short int events;
+ short int revents;
+};
+
+struct kernel_mapping {
+ long unsigned int page_offset;
+ long unsigned int virt_addr;
+ long unsigned int virt_offset;
+ uintptr_t phys_addr;
+ uintptr_t size;
+ long unsigned int va_pa_offset;
+ long unsigned int va_kernel_pa_offset;
+};
+
+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 rcu_work {
+ struct work_struct work;
+ struct callback_head rcu;
+ struct workqueue_struct *wq;
+};
+
+struct task_cputime {
+ u64 stime;
+ u64 utime;
+ long long unsigned int sum_exec_runtime;
+};
+
+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 bio;
+
+struct bio_list {
+ struct bio *head;
+ struct bio *tail;
+};
+
+struct reclaim_state {
+ long unsigned int reclaimed;
+};
+
+struct cgroup_subsys_state;
+
+struct css_set {
+ struct cgroup_subsys_state *subsys[12];
+ 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[12];
+ 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 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;
+ int nr_descendants;
+};
+
+struct mem_cgroup_id {
+ int id;
+ refcount_t ref;
+};
+
+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_;
+ long unsigned int emin;
+ atomic_long_t min_usage;
+ atomic_long_t children_min_usage;
+ long unsigned int elow;
+ atomic_long_t low_usage;
+ atomic_long_t children_low_usage;
+ long unsigned int watermark;
+ long unsigned int local_watermark;
+ long unsigned int failcnt;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct cacheline_padding _pad2_;
+ bool protection_support;
+ long unsigned int min;
+ long unsigned int low;
+ long unsigned int high;
+ long unsigned int max;
+ struct page_counter *parent;
+ long: 64;
+ long: 64;
+};
+
+struct vmpressure {
+ long unsigned int scanned;
+ long unsigned int reclaimed;
+ long unsigned int tree_scanned;
+ long unsigned int tree_reclaimed;
+ spinlock_t sr_lock;
+ struct list_head events;
+ struct mutex events_lock;
+ struct work_struct work;
+};
+
+struct cgroup_file {
+ struct kernfs_node *kn;
+ long unsigned int notified_at;
+ struct timer_list notify_timer;
+};
+
+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;
+ long unsigned int period_time;
+ long unsigned int dirty_limit_tstamp;
+ long unsigned int 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 memcg_vmstats;
+
+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;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct page_counter memory;
+ union {
+ struct page_counter swap;
+ struct page_counter memsw;
+ };
+ struct list_head memory_peaks;
+ struct list_head swap_peaks;
+ spinlock_t peaks_lock;
+ struct work_struct high_work;
+ struct vmpressure vmpressure;
+ bool oom_group;
+ int swappiness;
+ struct cgroup_file events_file;
+ struct cgroup_file events_local_file;
+ struct cgroup_file swap_events_file;
+ struct memcg_vmstats *vmstats;
+ atomic_long_t memory_events[9];
+ atomic_long_t memory_events_local[9];
+ long unsigned int socket_pressure;
+ int kmemcg_id;
+ struct obj_cgroup *objcg;
+ struct obj_cgroup *orig_objcg;
+ struct list_head objcg_list;
+ struct memcg_vmstats_percpu *vmstats_percpu;
+ struct list_head cgwb_list;
+ struct wb_domain cgwb_domain;
+ struct memcg_cgwb_frn cgwb_frn[4];
+ struct mem_cgroup_per_node *nodeinfo[0];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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 uid_gid_extent {
+ u32 first;
+ u32 lower_first;
+ u32 count;
+};
+
+struct uid_gid_map {
+ union {
+ struct {
+ struct uid_gid_extent extent[5];
+ u32 nr_extents;
+ };
+ 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;
+ const 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;
+ enum {
+ SYSCTL_TABLE_TYPE_DEFAULT = 0,
+ SYSCTL_TABLE_TYPE_PERMANENTLY_EMPTY = 1,
+ } type;
+};
+
+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;
+ long unsigned int 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 int ucount_max[10];
+ long int rlimit_max[4];
+};
+
+struct zswap_lruvec_state {};
+
+struct free_area {
+ struct list_head free_list[4];
+ long unsigned int nr_free;
+};
+
+struct pglist_data;
+
+struct lruvec {
+ struct list_head lists[5];
+ spinlock_t lru_lock;
+ long unsigned int anon_cost;
+ long unsigned int file_cost;
+ atomic_long_t nonresident_age;
+ long unsigned int refaults[2];
+ long unsigned int flags;
+ struct pglist_data *pgdat;
+ struct zswap_lruvec_state zswap_lruvec_state;
+};
+
+struct per_cpu_pages;
+
+struct per_cpu_zonestat;
+
+struct zone {
+ long unsigned int _watermark[4];
+ long unsigned int watermark_boost;
+ long unsigned int nr_reserved_highatomic;
+ long unsigned int nr_free_highatomic;
+ long int lowmem_reserve[3];
+ struct pglist_data *zone_pgdat;
+ struct per_cpu_pages *per_cpu_pageset;
+ struct per_cpu_zonestat *per_cpu_zonestats;
+ int pageset_high_min;
+ int pageset_high_max;
+ int pageset_batch;
+ long unsigned int zone_start_pfn;
+ atomic_long_t managed_pages;
+ long unsigned int spanned_pages;
+ long unsigned int present_pages;
+ const char *name;
+ int initialized;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct cacheline_padding _pad1_;
+ struct free_area free_area[11];
+ long unsigned int flags;
+ spinlock_t lock;
+ long: 64;
+ struct cacheline_padding _pad2_;
+ long unsigned int percpu_drift_mark;
+ long unsigned int compact_cached_free_pfn;
+ long unsigned int compact_cached_migrate_pfn[2];
+ long unsigned int compact_init_migrate_pfn;
+ long unsigned int 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[10];
+ atomic_long_t vm_numa_event[0];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct zoneref {
+ struct zone *zone;
+ int zone_idx;
+};
+
+struct zonelist {
+ struct zoneref _zonerefs[4];
+};
+
+enum zone_type {
+ ZONE_DMA32 = 0,
+ ZONE_NORMAL = 1,
+ ZONE_MOVABLE = 2,
+ __MAX_NR_ZONES = 3,
+};
+
+struct per_cpu_nodestat;
+
+struct pglist_data {
+ struct zone node_zones[3];
+ struct zonelist node_zonelists[1];
+ int nr_zones;
+ long unsigned int node_start_pfn;
+ long unsigned int node_present_pages;
+ long unsigned int 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;
+ long unsigned int nr_reclaim_start;
+ struct task_struct *kswapd;
+ int kswapd_order;
+ enum zone_type kswapd_highest_zoneidx;
+ int kswapd_failures;
+ int kcompactd_max_order;
+ enum zone_type kcompactd_highest_zoneidx;
+ wait_queue_head_t kcompactd_wait;
+ struct task_struct *kcompactd;
+ bool proactive_compact_trigger;
+ long unsigned int totalreserve_pages;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct cacheline_padding _pad1_;
+ struct lruvec __lruvec;
+ long unsigned int flags;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct cacheline_padding _pad2_;
+ struct per_cpu_nodestat *per_cpu_nodestats;
+ atomic_long_t vm_stat[45];
+ long: 64;
+ long: 64;
+};
+
+struct per_cpu_pages {
+ spinlock_t lock;
+ int count;
+ int high;
+ int high_min;
+ int high_max;
+ int batch;
+ u8 flags;
+ u8 alloc_factor;
+ short int free_count;
+ struct list_head lists[12];
+ long: 64;
+ long: 64;
+};
+
+struct per_cpu_zonestat {
+ s8 vm_stat_diff[10];
+ s8 stat_threshold;
+};
+
+struct per_cpu_nodestat {
+ s8 stat_threshold;
+ s8 vm_node_stat_diff[45];
+};
+
+struct notifier_block;
+
+typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
+
+struct notifier_block {
+ notifier_fn_t notifier_call;
+ struct notifier_block *next;
+ int priority;
+};
+
+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;
+};
+
+typedef int proc_handler(const 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;
+ 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_node {
+ struct rb_node node;
+ struct ctl_table_header *header;
+};
+
+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 *, kuid_t *, kgid_t *);
+ int (*permissions)(struct ctl_table_header *, const struct ctl_table *);
+};
+
+struct shrinker_info_unit {
+ atomic_long_t nr_deferred[64];
+ long unsigned int map[1];
+};
+
+struct shrinker_info {
+ struct callback_head rcu;
+ int map_nr_max;
+ struct shrinker_info_unit *unit[0];
+};
+
+struct cgroup_base_stat {
+ struct task_cputime cputime;
+};
+
+struct bpf_prog_array;
+
+struct cgroup_bpf {
+ struct bpf_prog_array *effective[28];
+ struct hlist_head progs[28];
+ u8 flags[28];
+ 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;
+ long unsigned int 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[0];
+ u16 subtree_control;
+ u16 subtree_ss_mask;
+ u16 old_subtree_control;
+ u16 old_subtree_ss_mask;
+ struct cgroup_subsys_state *subsys[12];
+ int nr_dying_subsys[12];
+ struct cgroup_root *root;
+ struct list_head cset_links;
+ struct list_head e_csets[12];
+ struct cgroup *dom_cgrp;
+ struct cgroup *old_dom_cgrp;
+ struct cgroup_rstat_cpu *rstat_cpu;
+ struct list_head rstat_css_list;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ 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;
+ struct cgroup_freezer_state freezer;
+ struct bpf_local_storage *bpf_cgrp_storage;
+ struct cgroup *ancestors[0];
+};
+
+struct wait_page_queue {
+ struct folio *folio;
+ int bit_nr;
+ wait_queue_entry_t wait;
+};
+
+enum writeback_sync_modes {
+ WB_SYNC_NONE = 0,
+ WB_SYNC_ALL = 1,
+};
+
+struct swap_iocb;
+
+struct writeback_control {
+ long int nr_to_write;
+ long int 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_netfs_wb: 1;
+ unsigned int no_cgroup_owner: 1;
+ struct swap_iocb **swap_plug;
+ struct list_head *list;
+ struct folio_batch fbatch;
+ long unsigned int index;
+ int saved_err;
+ 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;
+};
+
+struct readahead_control {
+ struct file *file;
+ struct address_space *mapping;
+ struct file_ra_state *ra;
+ long unsigned int _index;
+ unsigned int _nr_pages;
+ unsigned int _batch_count;
+ bool _workingset;
+ long unsigned int _pflags;
+};
+
+struct swap_cluster_info;
+
+struct percpu_cluster;
+
+struct swap_info_struct {
+ struct percpu_ref users;
+ long unsigned int flags;
+ short int prio;
+ struct plist_node list;
+ signed char type;
+ unsigned int max;
+ unsigned char *swap_map;
+ long unsigned int *zeromap;
+ struct swap_cluster_info *cluster_info;
+ struct list_head free_clusters;
+ struct list_head full_clusters;
+ struct list_head nonfull_clusters[1];
+ struct list_head frag_clusters[1];
+ unsigned int frag_cluster_nr[1];
+ 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 *cluster_next_cpu;
+ struct percpu_cluster *percpu_cluster;
+ struct rb_root swap_extent_root;
+ struct block_device *bdev;
+ struct file *swap_file;
+ struct completion comp;
+ spinlock_t lock;
+ spinlock_t cont_lock;
+ struct work_struct discard_work;
+ struct work_struct reclaim_work;
+ struct list_head discard_clusters;
+ struct plist_node avail_lists[0];
+};
+
+struct cdev {
+ struct kobject kobj;
+ struct module *owner;
+ const struct file_operations *ops;
+ struct list_head list;
+ dev_t dev;
+ unsigned int count;
+};
+
+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;
+ long unsigned int state;
+ long unsigned int 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];
+ long unsigned int bw_time_stamp;
+ long unsigned int dirtied_stamp;
+ long unsigned int written_stamp;
+ long unsigned int write_bandwidth;
+ long unsigned int avg_write_bandwidth;
+ long unsigned int dirty_ratelimit;
+ long unsigned int 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;
+ };
+};
+
+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 *bd_stats;
+ long unsigned int bd_stamp;
+ atomic_t __bd_flags;
+ dev_t bd_dev;
+ struct address_space *bd_mapping;
+ atomic_t bd_openers;
+ spinlock_t bd_size_lock;
+ void *bd_claiming;
+ void *bd_holder;
+ const struct blk_holder_ops *bd_holder_ops;
+ struct mutex bd_holder_lock;
+ int bd_holders;
+ struct kobject *bd_holder_dir;
+ atomic_t bd_fsfreeze_count;
+ struct mutex bd_fsfreeze_mutex;
+ struct partition_meta_info *bd_meta_info;
+ int bd_writers;
+ void *bd_security;
+ struct device bd_device;
+};
+
+struct backing_dev_info {
+ u64 id;
+ struct rb_node rb_node;
+ struct list_head bdi_list;
+ long unsigned int ra_pages;
+ long unsigned int 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;
+ long unsigned int 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;
+};
+
+typedef __u32 blk_opf_t;
+
+typedef u8 blk_status_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 blkcg_gq;
+
+struct bio_set;
+
+struct bio {
+ struct bio *bi_next;
+ struct block_device *bi_bdev;
+ blk_opf_t bi_opf;
+ short unsigned int bi_flags;
+ short unsigned int bi_ioprio;
+ enum rw_hint bi_write_hint;
+ blk_status_t bi_status;
+ atomic_t __bi_remaining;
+ struct bvec_iter bi_iter;
+ union {
+ blk_qc_t bi_cookie;
+ unsigned int __bi_nr_segments;
+ };
+ bio_end_io_t *bi_end_io;
+ void *bi_private;
+ struct blkcg_gq *bi_blkg;
+ struct bio_issue bi_issue;
+ short unsigned int bi_vcnt;
+ short unsigned int bi_max_vecs;
+ atomic_t __bi_cnt;
+ struct bio_vec *bi_io_vec;
+ struct bio_set *bi_pool;
+ struct bio_vec bi_inline_vecs[0];
+};
+
+enum memblock_flags {
+ MEMBLOCK_NONE = 0,
+ MEMBLOCK_HOTPLUG = 1,
+ MEMBLOCK_MIRROR = 2,
+ MEMBLOCK_NOMAP = 4,
+ MEMBLOCK_DRIVER_MANAGED = 8,
+ MEMBLOCK_RSRV_NOINIT = 16,
+};
+
+struct memblock_region {
+ phys_addr_t base;
+ phys_addr_t size;
+ enum memblock_flags flags;
+};
+
+struct memblock_type {
+ long unsigned int cnt;
+ long unsigned int max;
+ phys_addr_t total_size;
+ struct memblock_region *regions;
+ char *name;
+};
+
+struct memblock {
+ bool bottom_up;
+ phys_addr_t current_limit;
+ struct memblock_type memory;
+ struct memblock_type reserved;
+};
+
+struct cgroup_namespace {
+ struct ns_common ns;
+ struct user_namespace *user_ns;
+ struct ucounts *ucounts;
+ struct css_set *root_cset;
+};
+
+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,
+};
+
+enum {
+ TASKSTATS_CMD_UNSPEC = 0,
+ TASKSTATS_CMD_GET = 1,
+ TASKSTATS_CMD_NEW = 2,
+ __TASKSTATS_CMD_MAX = 3,
+};
+
+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 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,
+};
+
+struct u64_stats_sync {};
+
+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_UNIX_CONNECT = 9,
+ CGROUP_INET4_POST_BIND = 10,
+ CGROUP_INET6_POST_BIND = 11,
+ CGROUP_UDP4_SENDMSG = 12,
+ CGROUP_UDP6_SENDMSG = 13,
+ CGROUP_UNIX_SENDMSG = 14,
+ CGROUP_SYSCTL = 15,
+ CGROUP_UDP4_RECVMSG = 16,
+ CGROUP_UDP6_RECVMSG = 17,
+ CGROUP_UNIX_RECVMSG = 18,
+ CGROUP_GETSOCKOPT = 19,
+ CGROUP_SETSOCKOPT = 20,
+ CGROUP_INET4_GETPEERNAME = 21,
+ CGROUP_INET6_GETPEERNAME = 22,
+ CGROUP_UNIX_GETPEERNAME = 23,
+ CGROUP_INET4_GETSOCKNAME = 24,
+ CGROUP_INET6_GETSOCKNAME = 25,
+ CGROUP_UNIX_GETSOCKNAME = 26,
+ CGROUP_INET_SOCK_RELEASE = 27,
+ CGROUP_LSM_START = 28,
+ CGROUP_LSM_END = 27,
+ MAX_CGROUP_BPF_ATTACH_TYPE = 28,
+};
+
+struct psi_group {};
+
+enum cgroup_subsys_id {
+ cpuset_cgrp_id = 0,
+ cpu_cgrp_id = 1,
+ cpuacct_cgrp_id = 2,
+ io_cgrp_id = 3,
+ memory_cgrp_id = 4,
+ devices_cgrp_id = 5,
+ freezer_cgrp_id = 6,
+ net_cls_cgrp_id = 7,
+ perf_event_cgrp_id = 8,
+ net_prio_cgrp_id = 9,
+ hugetlb_cgrp_id = 10,
+ pids_cgrp_id = 11,
+ CGROUP_SUBSYS_COUNT = 12,
+};
+
+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 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 cgroup_root {
+ struct kernfs_root *kf_root;
+ unsigned int subsys_mask;
+ int hierarchy_id;
+ struct list_head root_list;
+ struct callback_head rcu;
+ long: 64;
+ long: 64;
+ struct cgroup cgrp;
+ struct cgroup *cgrp_ancestor_storage;
+ atomic_t nr_cgrps;
+ unsigned int flags;
+ char release_agent_path[4096];
+ char name[64];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct cftype {
+ char name[64];
+ long unsigned int 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 lock_class_key lockdep_key;
+};
+
+enum wb_stat_item {
+ WB_RECLAIMABLE = 0,
+ WB_WRITEBACK = 1,
+ WB_DIRTIED = 2,
+ WB_WRITTEN = 3,
+ NR_WB_STAT_ITEMS = 4,
+};
+
+struct blk_holder_ops {
+ void (*mark_dead)(struct block_device *, bool);
+ void (*sync)(struct block_device *);
+ int (*freeze)(struct block_device *);
+ int (*thaw)(struct block_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 *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;
+};
+
+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 mem_cgroup_reclaim_iter {
+ struct mem_cgroup *position;
+ atomic_t generation;
+};
+
+struct lruvec_stats_percpu;
+
+struct lruvec_stats;
+
+struct mem_cgroup_per_node {
+ struct mem_cgroup *memcg;
+ struct lruvec_stats_percpu *lruvec_stats_percpu;
+ struct lruvec_stats *lruvec_stats;
+ struct shrinker_info *shrinker_info;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct cacheline_padding _pad1_;
+ struct lruvec lruvec;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct cacheline_padding _pad2_;
+ long unsigned int lru_zone_size[15];
+ struct mem_cgroup_reclaim_iter iter;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+enum page_memcg_data_flags {
+ MEMCG_DATA_OBJEXTS = 1,
+ MEMCG_DATA_KMEM = 2,
+ __NR_MEMCG_DATA_FLAGS = 4,
+};
+
+struct swap_cluster_info {
+ spinlock_t lock;
+ u16 count;
+ u8 flags;
+ u8 order;
+ struct list_head list;
+};
+
+struct percpu_cluster {
+ unsigned int next[1];
+};
+
+typedef short int __s16;
+
+struct user_regs_struct {
+ long unsigned int pc;
+ long unsigned int ra;
+ long unsigned int sp;
+ long unsigned int gp;
+ long unsigned int tp;
+ long unsigned int t0;
+ long unsigned int t1;
+ long unsigned int t2;
+ long unsigned int s0;
+ long unsigned int s1;
+ long unsigned int a0;
+ long unsigned int a1;
+ long unsigned int a2;
+ long unsigned int a3;
+ long unsigned int a4;
+ long unsigned int a5;
+ long unsigned int a6;
+ long unsigned int a7;
+ long unsigned int s2;
+ long unsigned int s3;
+ long unsigned int s4;
+ long unsigned int s5;
+ long unsigned int s6;
+ long unsigned int s7;
+ long unsigned int s8;
+ long unsigned int s9;
+ long unsigned int s10;
+ long unsigned int s11;
+ long unsigned int t3;
+ long unsigned int t4;
+ long unsigned int t5;
+ long unsigned int t6;
+};
+
+struct __riscv_f_ext_state {
+ __u32 f[32];
+ __u32 fcsr;
+};
+
+struct __riscv_q_ext_state {
+ __u64 f[64];
+ __u32 fcsr;
+ __u32 reserved[3];
+};
+
+struct __riscv_ctx_hdr {
+ __u32 magic;
+ __u32 size;
+};
+
+struct __riscv_extra_ext_header {
+ __u32 __padding[129];
+ __u32 reserved;
+ struct __riscv_ctx_hdr hdr;
+};
+
+union __riscv_fp_state {
+ struct __riscv_f_ext_state f;
+ struct __riscv_d_ext_state d;
+ struct __riscv_q_ext_state q;
+};
+
+struct sigaltstack {
+ void *ss_sp;
+ int ss_flags;
+ __kernel_size_t ss_size;
+};
+
+typedef struct sigaltstack stack_t;
+
+struct __sc_riscv_v_state {
+ struct __riscv_v_ext_state v_state;
+};
+
+struct sigcontext {
+ struct user_regs_struct sc_regs;
+ union {
+ union __riscv_fp_state sc_fpregs;
+ struct __riscv_extra_ext_header sc_extdesc;
+ };
+};
+
+struct siginfo {
+ union {
+ struct {
+ int si_signo;
+ int si_errno;
+ int si_code;
+ union __sifields _sifields;
+ };
+ int _si_pad[32];
+ };
+};
+
+typedef struct siginfo siginfo_t;
+
+struct ksignal {
+ struct k_sigaction ka;
+ kernel_siginfo_t info;
+ int sig;
+};
+
+struct perf_event_groups {
+ struct rb_root tree;
+ u64 index;
+};
+
+typedef struct {
+ atomic_long_t a;
+} local_t;
+
+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;
+ int nr_cgroups;
+ struct callback_head callback_head;
+ local_t nr_no_switch_fast;
+};
+
+struct bpf_run_ctx {};
+
+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 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 bpf_insn {
+ __u8 code;
+ __u8 dst_reg: 4;
+ __u8 src_reg: 4;
+ __s16 off;
+ __s32 imm;
+};
+
+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_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_DEPRECATED = 21,
+ 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,
+ BPF_MAP_TYPE_ARENA = 33,
+ __MAX_BPF_MAP_TYPE = 34,
+};
+
+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,
+ __MAX_BPF_PROG_TYPE = 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,
+ BPF_CGROUP_UNIX_CONNECT = 49,
+ BPF_CGROUP_UNIX_SENDMSG = 50,
+ BPF_CGROUP_UNIX_RECVMSG = 51,
+ BPF_CGROUP_UNIX_GETPEERNAME = 52,
+ BPF_CGROUP_UNIX_GETSOCKNAME = 53,
+ BPF_NETKIT_PRIMARY = 54,
+ BPF_NETKIT_PEER = 55,
+ BPF_TRACE_KPROBE_SESSION = 56,
+ __MAX_BPF_ATTACH_TYPE = 57,
+};
+
+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;
+ __s32 value_type_btf_obj_fd;
+ __s32 map_token_fd;
+ };
+ 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;
+ __s32 prog_token_fd;
+ };
+ 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;
+ __u64 cookie;
+ } 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;
+ __u32 btf_flags;
+ __s32 btf_token_fd;
+ };
+ 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;
+ struct {
+ union {
+ __u32 relative_fd;
+ __u32 relative_id;
+ };
+ __u64 expected_revision;
+ } netkit;
+ };
+ } 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 {
+ __u32 flags;
+ __u32 bpffs_fd;
+ } token_create;
+};
+
+struct bpf_func_info {
+ __u32 insn_off;
+ __u32 type_id;
+};
+
+struct bpf_line_info {
+ __u32 insn_off;
+ __u32 file_name_off;
+ __u32 line_off;
+ __u32 line_col;
+};
+
+struct sock_filter {
+ __u16 code;
+ __u8 jt;
+ __u8 jf;
+ __u32 k;
+};
+
+struct btf_type {
+ __u32 name_off;
+ __u32 info;
+ union {
+ __u32 size;
+ __u32 type;
+ };
+};
+
+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;
+ u16 sleepable: 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 *stats;
+ int *active;
+ unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
+ struct bpf_prog_aux *aux;
+ struct sock_fprog_kern *orig_prog;
+ union {
+ struct {
+ struct {} __empty_insns;
+ struct sock_filter insns[0];
+ };
+ struct {
+ struct {} __empty_insnsi;
+ struct bpf_insn insnsi[0];
+ };
+ };
+};
+
+enum btf_field_type {
+ BPF_SPIN_LOCK = 1,
+ BPF_TIMER = 2,
+ BPF_KPTR_UNREF = 4,
+ BPF_KPTR_REF = 8,
+ BPF_KPTR_PERCPU = 16,
+ BPF_KPTR = 28,
+ BPF_LIST_HEAD = 32,
+ BPF_LIST_NODE = 64,
+ BPF_RB_ROOT = 128,
+ BPF_RB_NODE = 256,
+ BPF_GRAPH_NODE = 320,
+ BPF_GRAPH_ROOT = 160,
+ BPF_REFCOUNT = 512,
+ BPF_WORKQUEUE = 1024,
+};
+
+typedef void (*btf_dtor_kfunc_t)(void *);
+
+struct btf;
+
+struct btf_field_kptr {
+ struct btf *btf;
+ struct module *module;
+ btf_dtor_kfunc_t dtor;
+ u32 btf_id;
+};
+
+struct btf_record;
+
+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 wq_off;
+ int refcount_off;
+ struct btf_field fields[0];
+};
+
+typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64);
+
+struct bpf_iter_aux_info;
+
+typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
+
+enum bpf_iter_task_type {
+ BPF_TASK_ITER_ALL = 0,
+ BPF_TASK_ITER_TID = 1,
+ BPF_TASK_ITER_TGID = 2,
+};
+
+struct bpf_map;
+
+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 (*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_local_storage_map;
+
+struct bpf_verifier_env;
+
+struct bpf_func_state;
+
+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 *);
+ 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 *);
+ int (*map_update_batch)(struct bpf_map *, struct file *, const union bpf_attr *, union bpf_attr *);
+ int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+ void * (*map_lookup_elem)(struct bpf_map *, void *);
+ long int (*map_update_elem)(struct bpf_map *, void *, void *, u64);
+ long int (*map_delete_elem)(struct bpf_map *, void *);
+ long int (*map_push_elem)(struct bpf_map *, void *, u64);
+ long int (*map_pop_elem)(struct bpf_map *, void *);
+ long int (*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 *);
+ long unsigned int (*map_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+ 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 ** (*map_owner_storage_ptr)(void *);
+ long int (*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 int (*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;
+};
+
+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];
+ struct mutex freeze_mutex;
+ atomic64_t refcnt;
+ atomic64_t usercnt;
+ union {
+ struct work_struct work;
+ struct callback_head rcu;
+ };
+ atomic64_t writecnt;
+ struct {
+ const struct btf_type *attach_func_proto;
+ 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;
+ bool free_after_rcu_gp;
+ atomic64_t sleepable_refcnt;
+ s64 *elem_count;
+};
+
+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_struct_ops_tab;
+
+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_struct_ops_tab *struct_ops_tab;
+ struct btf *base_btf;
+ u32 start_id;
+ u32 start_str_off;
+ char name[56];
+ bool kernel_btf;
+ __u32 *base_id_map;
+};
+
+struct bpf_ksym {
+ long unsigned int start;
+ long unsigned int end;
+ char name[512];
+ struct list_head lnode;
+ struct latch_tree_node tnode;
+ bool prog;
+};
+
+struct bpf_ctx_arg_aux;
+
+struct bpf_trampoline;
+
+struct bpf_arena;
+
+struct bpf_jit_poke_descriptor;
+
+struct bpf_kfunc_desc_tab;
+
+struct bpf_kfunc_btf_tab;
+
+struct bpf_prog_ops;
+
+struct btf_mod_pair;
+
+struct bpf_token;
+
+struct bpf_prog_offload;
+
+struct bpf_func_info_aux;
+
+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 real_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 attach_tracing_prog;
+ bool func_proto_unreliable;
+ bool tail_call_reachable;
+ bool xdp_has_frags;
+ bool exception_cb;
+ bool exception_boundary;
+ struct bpf_arena *arena;
+ 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];
+ u64 (*bpf_exception_cb)(u64, u64, u64, u64, u64);
+ void *security;
+ struct bpf_token *token;
+ 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;
+ };
+};
+
+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_ARENA = 18,
+ PTR_TO_BUF = 19,
+ PTR_TO_FUNC = 20,
+ CONST_PTR_TO_DYNPTR = 21,
+ __BPF_REG_TYPE_MAX = 22,
+ 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 = 134217727,
+};
+
+struct bpf_prog_ops {
+ int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
+};
+
+struct net_device;
+
+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;
+};
+
+struct btf_func_model {
+ u8 ret_size;
+ u8 ret_flags;
+ u8 nr_args;
+ u8 arg_size[12];
+ u8 arg_flags[12];
+};
+
+struct bpf_tramp_image {
+ void *image;
+ int size;
+ 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 ftrace_ops;
+
+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 bpf_func_info_aux {
+ u16 linkage;
+ bool unreliable;
+ bool called: 1;
+ bool verified: 1;
+};
+
+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_ctx_arg_aux {
+ u32 offset;
+ enum bpf_reg_type reg_type;
+ struct btf *btf;
+ u32 btf_id;
+};
+
+struct btf_mod_pair {
+ struct btf *btf;
+ struct module *module;
+};
+
+struct bpf_token {
+ struct work_struct work;
+ atomic64_t refcnt;
+ struct user_namespace *userns;
+ u64 allowed_cmds;
+ u64 allowed_maps;
+ u64 allowed_progs;
+ u64 allowed_attachs;
+ void *security;
+};
+
+enum {
+ TRACE_EVENT_FL_FILTERED_BIT = 0,
+ TRACE_EVENT_FL_CAP_ANY_BIT = 1,
+ TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,
+ TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,
+ TRACE_EVENT_FL_TRACEPOINT_BIT = 4,
+ TRACE_EVENT_FL_DYNAMIC_BIT = 5,
+ TRACE_EVENT_FL_KPROBE_BIT = 6,
+ TRACE_EVENT_FL_UPROBE_BIT = 7,
+ TRACE_EVENT_FL_EPROBE_BIT = 8,
+ TRACE_EVENT_FL_FPROBE_BIT = 9,
+ TRACE_EVENT_FL_CUSTOM_BIT = 10,
+};
+
+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 rseq_event_mask_bits {
+ RSEQ_EVENT_PREEMPT_BIT = 0,
+ RSEQ_EVENT_SIGNAL_BIT = 1,
+ RSEQ_EVENT_MIGRATE_BIT = 2,
+};
+
+struct ucontext {
+ long unsigned int 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;
+};
+
+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 (*cpu_stop_fn_t)(void *);
+
+enum fixed_addresses {
+ FIX_HOLE = 0,
+ FIX_FDT_END = 1,
+ FIX_FDT = 1024,
+ FIX_PTE = 1025,
+ FIX_PMD = 1026,
+ FIX_PUD = 1027,
+ FIX_P4D = 1028,
+ FIX_TEXT_POKE1 = 1029,
+ FIX_TEXT_POKE0 = 1030,
+ FIX_EARLYCON_MEM_BASE = 1031,
+ __end_of_permanent_fixed_addresses = 1032,
+ FIX_BTMAP_END = 1032,
+ FIX_BTMAP_BEGIN = 1479,
+ __end_of_fixed_addresses = 1480,
+};
+
+struct patch_insn {
+ void *addr;
+ u32 *insns;
+ size_t len;
+ atomic_t cpu_count;
+};
+
+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)();
+};
+
+enum sbi_ext_id {
+ SBI_EXT_BASE = 16,
+ SBI_EXT_TIME = 1414090053,
+ SBI_EXT_IPI = 7557193,
+ SBI_EXT_RFENCE = 1380339267,
+ SBI_EXT_HSM = 4739917,
+ SBI_EXT_SRST = 1397904212,
+ SBI_EXT_SUSP = 1398100816,
+ SBI_EXT_PMU = 5262677,
+ SBI_EXT_DBCN = 1145193294,
+ SBI_EXT_STA = 5461057,
+ SBI_EXT_EXPERIMENTAL_START = 134217728,
+ SBI_EXT_EXPERIMENTAL_END = 150994943,
+ SBI_EXT_VENDOR_START = 150994944,
+ SBI_EXT_VENDOR_END = 167772159,
+};
+
+enum sbi_ext_hsm_fid {
+ SBI_EXT_HSM_HART_START = 0,
+ SBI_EXT_HSM_HART_STOP = 1,
+ SBI_EXT_HSM_HART_STATUS = 2,
+ SBI_EXT_HSM_HART_SUSPEND = 3,
+};
+
+enum sbi_ext_susp_fid {
+ SBI_EXT_SUSP_SYSTEM_SUSPEND = 0,
+};
+
+enum sbi_ext_susp_sleep_type {
+ SBI_SUSP_SLEEP_TYPE_SUSPEND_TO_RAM = 0,
+};
+
+struct sbiret {
+ long int error;
+ long int value;
+};
+
+struct suspend_context {
+ struct pt_regs regs;
+ long unsigned int envcfg;
+ long unsigned int tvec;
+ long unsigned int ie;
+ long unsigned int satp;
+};
+
+enum jump_label_type {
+ JUMP_LABEL_NOP = 0,
+ JUMP_LABEL_JMP = 1,
+};
+
+struct static_key_mod;
+
+struct static_key {
+ atomic_t enabled;
+ union {
+ long unsigned int type;
+ struct jump_entry *entries;
+ struct static_key_mod *next;
+ };
+};
+
+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,
+};
+
+struct riscv_nonstd_cache_ops {
+ void (*wback)(phys_addr_t, size_t);
+ void (*inv)(phys_addr_t, size_t);
+ void (*wback_inv)(phys_addr_t, size_t);
+};
+
+struct taint_flag {
+ char c_true;
+ char c_false;
+ bool module;
+ const char *desc;
+};
+
+enum lockdep_ok {
+ LOCKDEP_STILL_OK = 0,
+ LOCKDEP_NOW_UNRELIABLE = 1,
+};
+
+typedef void *va_list;
+
+struct obs_kernel_param {
+ const char *str;
+ int (*setup_func)(char *);
+ int early;
+};
+
+enum ftrace_dump_mode {
+ DUMP_NONE = 0,
+ DUMP_ALL = 1,
+ DUMP_ORIG = 2,
+ DUMP_PARAM = 3,
+};
+
+struct llist_head {
+ struct llist_node *first;
+};
+
+enum ctx_state {
+ CT_STATE_DISABLED = -1,
+ CT_STATE_KERNEL = 0,
+ CT_STATE_IDLE = 1,
+ CT_STATE_USER = 2,
+ CT_STATE_GUEST = 3,
+ CT_STATE_MAX = 4,
+};
+
+struct context_tracking {
+ atomic_t state;
+ long int nesting;
+ long int nmi_nesting;
+};
+
+struct atomic_notifier_head {
+ spinlock_t lock;
+ struct notifier_block *head;
+};
+
+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 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 {
+ short unsigned int ws_row;
+ short unsigned int ws_col;
+ short unsigned int ws_xpixel;
+ short unsigned int ws_ypixel;
+};
+
+struct tty_driver;
+
+struct tty_port;
+
+struct tty_operations;
+
+struct tty_ldisc;
+
+struct fasync_struct;
+
+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];
+ long unsigned int flags;
+ int count;
+ unsigned int receive_room;
+ struct winsize winsize;
+ struct {
+ spinlock_t lock;
+ bool stopped;
+ bool tco_stopped;
+ } flow;
+ struct {
+ struct pid *pgrp;
+ struct pid *session;
+ spinlock_t lock;
+ unsigned char pktstatus;
+ bool packet;
+ } 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;
+ u8 *write_buf;
+ struct list_head tty_files;
+ struct work_struct SAK_work;
+};
+
+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;
+};
+
+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,
+};
+
+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, long unsigned int);
+ long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+ 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 *);
+ int (*ldisc_ok)(struct tty_struct *, int);
+ void (*set_ldisc)(struct tty_struct *);
+ void (*wait_until_sent)(struct tty_struct *, int);
+ void (*send_xchar)(struct tty_struct *, u8);
+ 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 *);
+};
+
+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 int type;
+ short int subtype;
+ struct ktermios init_termios;
+ long unsigned int 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;
+};
+
+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 __kfifo {
+ unsigned int in;
+ unsigned int out;
+ unsigned int mask;
+ unsigned int esize;
+ void *data;
+};
+
+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;
+ long unsigned int flags;
+ long unsigned int iflags;
+ unsigned char console: 1;
+ struct mutex mutex;
+ struct mutex buf_mutex;
+ u8 *xmit_buf;
+ struct {
+ union {
+ struct __kfifo kfifo;
+ u8 *type;
+ const u8 *const_type;
+ char (*rectype)[0];
+ u8 *ptr;
+ const u8 *ptr_const;
+ };
+ u8 buf[0];
+ } xmit_fifo;
+ unsigned int close_delay;
+ unsigned int closing_wait;
+ int drain_delay;
+ struct kref kref;
+ void *client_data;
+};
+
+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 **, long unsigned int);
+ ssize_t (*write)(struct tty_struct *, struct file *, const u8 *, size_t);
+ int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+ int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+ 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;
+};
+
+struct tty_ldisc {
+ struct tty_ldisc_ops *ops;
+ struct tty_struct *tty;
+};
+
+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 *);
+};
+
+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 *);
+};
+
+enum reboot_mode {
+ REBOOT_UNDEFINED = -1,
+ REBOOT_COLD = 0,
+ REBOOT_WARM = 1,
+ REBOOT_HARD = 2,
+ REBOOT_SOFT = 3,
+ REBOOT_GPIO = 4,
+};
+
+enum con_flush_mode {
+ CONSOLE_FLUSH_PENDING = 0,
+ CONSOLE_REPLAY_ALL = 1,
+};
+
+struct seq_buf {
+ char *buffer;
+ size_t size;
+ size_t len;
+};
+
+enum error_detector {
+ ERROR_DETECTOR_KFENCE = 0,
+ ERROR_DETECTOR_KASAN = 1,
+ ERROR_DETECTOR_WARN = 2,
+};
+
+struct warn_args {
+ const char *fmt;
+ va_list args;
+};
+
+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,
+};
+
+struct sigqueue {
+ struct list_head list;
+ int flags;
+ kernel_siginfo_t info;
+ struct ucounts *ucounts;
+};
+
+typedef struct {
+ rwlock_t *lock;
+} class_write_lock_irq_t;
+
+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,
+};
+
+typedef struct mutex *class_mutex_t;
+
+typedef class_mutex_t class_mutex_intr_t;
+
+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,
+};
+
+typedef u32 compat_size_t;
+
+typedef s32 compat_clock_t;
+
+typedef s32 compat_pid_t;
+
+typedef s32 compat_timer_t;
+
+typedef s32 compat_int_t;
+
+typedef u32 __compat_uid32_t;
+
+typedef struct task_struct *class_task_lock_t;
+
+struct wait_bit_key {
+ void *flags;
+ int bit_nr;
+ long unsigned int timeout;
+};
+
+typedef int wait_bit_action_f(struct wait_bit_key *, int);
+
+struct ptrace_peeksiginfo_args {
+ __u64 off;
+ __u32 flags;
+ __s32 nr;
+};
+
+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_rseq_configuration {
+ __u64 rseq_abi_pointer;
+ __u32 rseq_abi_size;
+ __u32 signature;
+ __u32 flags;
+ __u32 pad;
+};
+
+struct compat_iovec {
+ compat_uptr_t iov_base;
+ compat_size_t iov_len;
+};
+
+union compat_sigval {
+ compat_int_t sival_int;
+ compat_uptr_t sival_ptr;
+};
+
+typedef union compat_sigval compat_sigval_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 int _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;
+
+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_COUNTERS_SHIFT = 19,
+ PERF_SAMPLE_BRANCH_MAX_SHIFT = 20,
+};
+
+typedef __s16 s16;
+
+typedef __u16 __be16;
+
+typedef __u32 __be32;
+
+typedef __u32 __wsum;
+
+struct rhash_head {
+ struct rhash_head *next;
+};
+
+struct rhashtable;
+
+struct rhashtable_compare_arg {
+ struct rhashtable *ht;
+ const void *key;
+};
+
+typedef u32 (*rht_hashfn_t)(const void *, u32, u32);
+
+typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);
+
+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 *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 in6_addr {
+ union {
+ __u8 u6_addr8[16];
+ __be16 u6_addr16[8];
+ __be32 u6_addr32[4];
+ } in6_u;
+};
+
+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 map_id;
+ enum bpf_map_type map_type;
+ struct bpf_nh_params nh;
+ u32 kern_flags;
+};
+
+struct bpf_net_context {
+ struct bpf_redirect_info ri;
+ struct list_head cpu_map_flush_list;
+ struct list_head dev_map_flush_list;
+ struct list_head xskmap_map_flush_list;
+};
+
+typedef short unsigned int __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];
+ };
+ };
+};
+
+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;
+ long unsigned int 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 {
+ long unsigned int _skb_refdst;
+ void (*destructor)(struct sk_buff *);
+ };
+ struct list_head tcp_tsorted_anchor;
+ long unsigned int _sk_redir;
+ };
+ long unsigned int _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 tstamp_type: 2;
+ __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 ipvs_property: 1;
+ __u8 redirected: 1;
+ __u8 slow_gro: 1;
+ __u8 unreadable: 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;
+ };
+ 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 tstamp_type: 2;
+ __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 ipvs_property: 1;
+ __u8 redirected: 1;
+ __u8 slow_gro: 1;
+ __u8 unreadable: 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;
+ } 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;
+};
+
+typedef struct {
+ unsigned int clock_rate;
+ unsigned int clock_type;
+ short unsigned int loopback;
+} sync_serial_settings;
+
+typedef struct {
+ unsigned int clock_rate;
+ unsigned int clock_type;
+ short unsigned int loopback;
+ unsigned int slot_map;
+} te1_settings;
+
+typedef struct {
+ short unsigned int encoding;
+ short unsigned int parity;
+} raw_hdlc_proto;
+
+typedef struct {
+ unsigned int t391;
+ unsigned int t392;
+ unsigned int n391;
+ unsigned int n392;
+ unsigned int n393;
+ short unsigned int lmi;
+ short unsigned int 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 int interval;
+ unsigned int timeout;
+} cisco_proto;
+
+typedef struct {
+ short unsigned int dce;
+ unsigned int modulo;
+ unsigned int window;
+ unsigned int t1;
+ unsigned int t2;
+ unsigned int n2;
+} x25_hdlc_proto;
+
+struct ifmap {
+ long unsigned int mem_start;
+ long unsigned int mem_end;
+ short unsigned int base_addr;
+ unsigned char irq;
+ unsigned char dma;
+ unsigned char port;
+};
+
+struct if_settings {
+ unsigned int type;
+ unsigned int size;
+ union {
+ raw_hdlc_proto *raw_hdlc;
+ cisco_proto *cisco;
+ fr_proto *fr;
+ fr_proto_pvc *fr_pvc;
+ fr_proto_pvc_info *fr_pvc_info;
+ x25_hdlc_proto *x25;
+ sync_serial_settings *sync;
+ te1_settings *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 int ifru_flags;
+ int ifru_ivalue;
+ int ifru_mtu;
+ struct ifmap ifru_map;
+ char ifru_slave[16];
+ char ifru_newname[16];
+ void *ifru_data;
+ struct if_settings ifru_settings;
+ } ifr_ifru;
+};
+
+struct blocking_notifier_head {
+ struct rw_semaphore rwsem;
+ struct notifier_block *head;
+};
+
+struct raw_notifier_head {
+ struct notifier_block *head;
+};
+
+struct ref_tracker_dir {};
+
+struct prot_inuse;
+
+struct netns_core {
+ struct ctl_table_header *sysctl_hdr;
+ int sysctl_somaxconn;
+ int sysctl_optmem_max;
+ u8 sysctl_txrehash;
+ struct prot_inuse *prot_inuse;
+ struct cpumask *rps_default_mask;
+};
+
+struct ipstats_mib;
+
+struct tcp_mib;
+
+struct linux_mib;
+
+struct udp_mib;
+
+struct icmp_mib;
+
+struct icmpmsg_mib;
+
+struct icmpv6_mib;
+
+struct icmpv6msg_mib;
+
+struct netns_mib {
+ struct ipstats_mib *ip_statistics;
+ struct ipstats_mib *ipv6_statistics;
+ struct tcp_mib *tcp_statistics;
+ struct linux_mib *net_statistics;
+ struct udp_mib *udp_statistics;
+ struct udp_mib *udp_stats_in6;
+ struct udp_mib *udplite_statistics;
+ struct udp_mib *udplite_stats_in6;
+ struct icmp_mib *icmp_statistics;
+ struct icmpmsg_mib *icmpmsg_statistics;
+ struct icmpv6_mib *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 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;
+};
+
+struct local_ports {
+ u32 range;
+ 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 inet_peer_base;
+
+struct fqdir;
+
+struct tcp_congestion_ops;
+
+struct tcp_fastopen_context;
+
+struct fib_notifier_ops;
+
+struct netns_ipv4 {
+ __u8 __cacheline_group_begin__netns_ipv4_read_tx[0];
+ u8 sysctl_tcp_early_retrans;
+ u8 sysctl_tcp_tso_win_divisor;
+ u8 sysctl_tcp_tso_rtt_log;
+ u8 sysctl_tcp_autocorking;
+ int sysctl_tcp_min_snd_mss;
+ unsigned int sysctl_tcp_notsent_lowat;
+ int sysctl_tcp_limit_output_bytes;
+ int sysctl_tcp_min_rtt_wlen;
+ int sysctl_tcp_wmem[3];
+ u8 sysctl_ip_fwd_use_pmtu;
+ __u8 __cacheline_group_end__netns_ipv4_read_tx[0];
+ __u8 __cacheline_group_begin__netns_ipv4_read_txrx[0];
+ u8 sysctl_tcp_moderate_rcvbuf;
+ __u8 __cacheline_group_end__netns_ipv4_read_txrx[0];
+ __u8 __cacheline_group_begin__netns_ipv4_read_rx[0];
+ u8 sysctl_ip_early_demux;
+ u8 sysctl_tcp_early_demux;
+ int sysctl_tcp_reordering;
+ int sysctl_tcp_rmem[3];
+ __u8 __cacheline_group_end__netns_ipv4_read_rx[0];
+ long: 64;
+ 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 *ra_chain;
+ struct mutex ra_mutex;
+ 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;
+ int sysctl_icmp_msgs_per_sec;
+ int sysctl_icmp_msgs_burst;
+ atomic_t icmp_global_credit;
+ u32 icmp_global_stamp;
+ 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_update_priority;
+ u8 sysctl_ip_nonlocal_bind;
+ u8 sysctl_ip_autobind_reuse;
+ u8 sysctl_ip_dynaddr;
+ u8 sysctl_raw_l3mdev_accept;
+ u8 sysctl_udp_early_demux;
+ u8 sysctl_nexthop_compat_mode;
+ u8 sysctl_fwmark_reflect;
+ u8 sysctl_tcp_fwmark_accept;
+ u8 sysctl_tcp_l3mdev_accept;
+ u8 sysctl_tcp_mtu_probing;
+ int sysctl_tcp_mtu_probe_floor;
+ int sysctl_tcp_base_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;
+ u8 sysctl_tcp_backlog_ack_defer;
+ u8 sysctl_tcp_pingpong_thresh;
+ u8 sysctl_tcp_retries1;
+ u8 sysctl_tcp_retries2;
+ u8 sysctl_tcp_orphan_retries;
+ u8 sysctl_tcp_tw_reuse;
+ int sysctl_tcp_fin_timeout;
+ u8 sysctl_tcp_sack;
+ u8 sysctl_tcp_window_scaling;
+ u8 sysctl_tcp_timestamps;
+ int sysctl_tcp_rto_min_us;
+ 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_workaround_signed_windows;
+ int sysctl_tcp_challenge_ack_limit;
+ u8 sysctl_tcp_min_tso_segs;
+ u8 sysctl_tcp_reflect_tos;
+ int sysctl_tcp_invalid_ratelimit;
+ int sysctl_tcp_pacing_ss_ratio;
+ int sysctl_tcp_pacing_ca_ratio;
+ unsigned int sysctl_tcp_child_ehash_entries;
+ long unsigned int sysctl_tcp_comp_sack_delay_ns;
+ long unsigned int sysctl_tcp_comp_sack_slack_ns;
+ int sysctl_max_syn_backlog;
+ int sysctl_tcp_fastopen;
+ const struct tcp_congestion_ops *tcp_congestion_control;
+ struct tcp_fastopen_context *tcp_fastopen_ctx;
+ unsigned int sysctl_tcp_fastopen_blackhole_timeout;
+ atomic_t tfo_active_disable_times;
+ long unsigned int 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_udp_l3mdev_accept;
+ 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;
+ long unsigned int *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;
+ long: 64;
+ long: 64;
+};
+
+struct dst_entry;
+
+struct neighbour;
+
+struct dst_ops {
+ short unsigned int 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 *, long unsigned int);
+ void (*destroy)(struct dst_entry *);
+ void (*ifdown)(struct dst_entry *, struct net_device *);
+ void (*negative_advice)(struct sock *, 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;
+};
+
+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;
+ long unsigned int icmpv6_ratemask[4];
+ long unsigned int *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;
+};
+
+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;
+ long unsigned int ip6_rt_last_gc;
+ unsigned char flowlabel_has_excl;
+ 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;
+ 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;
+ long: 64;
+ long: 64;
+};
+
+struct nf_logger;
+
+struct nf_hook_entries;
+
+struct netns_nf {
+ struct proc_dir_entry *proc_netfilter;
+ const struct nf_logger *nf_loggers[11];
+ struct ctl_table_header *nf_log_dir_header;
+ struct nf_hook_entries *hooks_ipv4[5];
+ struct nf_hook_entries *hooks_ipv6[5];
+ struct nf_hook_entries *hooks_bridge[5];
+ unsigned int defrag_ipv4_users;
+ unsigned int defrag_ipv6_users;
+};
+
+struct nf_ct_event_notifier;
+
+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_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 ip_conntrack_stat;
+
+struct netns_ct {
+ u8 sysctl_log_invalid;
+ u8 sysctl_events;
+ u8 sysctl_acct;
+ u8 sysctl_tstamp;
+ u8 sysctl_checksum;
+ struct ip_conntrack_stat *stat;
+ struct nf_ct_event_notifier *nf_conntrack_event_cb;
+ struct nf_ip_net nf_ct_proto;
+};
+
+struct netns_bpf {
+ struct bpf_prog_array *run_array[2];
+ struct bpf_prog *progs[2];
+ struct list_head links[2];
+};
+
+struct xfrm_policy_hash {
+ struct hlist_head *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 *state_bydst;
+ struct hlist_head *state_bysrc;
+ struct hlist_head *state_byspi;
+ struct hlist_head *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 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;
+ 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;
+ struct delayed_work nat_keepalive_work;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct netns_ipvs;
+
+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;
+};
+
+struct uevent_sock;
+
+struct net_generic;
+
+struct net {
+ refcount_t passive;
+ spinlock_t rules_mod_lock;
+ 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;
+ long: 64;
+ struct netns_ipv4 ipv4;
+ struct netns_ipv6 ipv6;
+ struct netns_nf nf;
+ struct netns_ct ct;
+ struct net_generic *gen;
+ struct netns_bpf bpf;
+ long: 64;
+ long: 64;
+ struct netns_xfrm xfrm;
+ u64 net_cookie;
+ struct netns_ipvs *ipvs;
+ struct netns_can can;
+ struct sock *diag_nlsk;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+typedef struct {
+ local_t a;
+} local64_t;
+
+typedef struct {
+ local64_t v;
+} u64_stats_t;
+
+struct bpf_offloaded_map;
+
+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 *);
+};
+
+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;
+};
+
+typedef u64 netdev_features_t;
+
+struct netdev_tc_txq {
+ u16 count;
+ u16 offset;
+};
+
+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 **);
+
+typedef struct {
+ struct net *net;
+} possible_net_t;
+
+typedef u32 xdp_features_t;
+
+struct net_device_stats {
+ union {
+ long unsigned int rx_packets;
+ atomic_long_t __rx_packets;
+ };
+ union {
+ long unsigned int tx_packets;
+ atomic_long_t __tx_packets;
+ };
+ union {
+ long unsigned int rx_bytes;
+ atomic_long_t __rx_bytes;
+ };
+ union {
+ long unsigned int tx_bytes;
+ atomic_long_t __tx_bytes;
+ };
+ union {
+ long unsigned int rx_errors;
+ atomic_long_t __rx_errors;
+ };
+ union {
+ long unsigned int tx_errors;
+ atomic_long_t __tx_errors;
+ };
+ union {
+ long unsigned int rx_dropped;
+ atomic_long_t __rx_dropped;
+ };
+ union {
+ long unsigned int tx_dropped;
+ atomic_long_t __tx_dropped;
+ };
+ union {
+ long unsigned int multicast;
+ atomic_long_t __multicast;
+ };
+ union {
+ long unsigned int collisions;
+ atomic_long_t __collisions;
+ };
+ union {
+ long unsigned int rx_length_errors;
+ atomic_long_t __rx_length_errors;
+ };
+ union {
+ long unsigned int rx_over_errors;
+ atomic_long_t __rx_over_errors;
+ };
+ union {
+ long unsigned int rx_crc_errors;
+ atomic_long_t __rx_crc_errors;
+ };
+ union {
+ long unsigned int rx_frame_errors;
+ atomic_long_t __rx_frame_errors;
+ };
+ union {
+ long unsigned int rx_fifo_errors;
+ atomic_long_t __rx_fifo_errors;
+ };
+ union {
+ long unsigned int rx_missed_errors;
+ atomic_long_t __rx_missed_errors;
+ };
+ union {
+ long unsigned int tx_aborted_errors;
+ atomic_long_t __tx_aborted_errors;
+ };
+ union {
+ long unsigned int tx_carrier_errors;
+ atomic_long_t __tx_carrier_errors;
+ };
+ union {
+ long unsigned int tx_fifo_errors;
+ atomic_long_t __tx_fifo_errors;
+ };
+ union {
+ long unsigned int tx_heartbeat_errors;
+ atomic_long_t __tx_heartbeat_errors;
+ };
+ union {
+ long unsigned int tx_window_errors;
+ atomic_long_t __tx_window_errors;
+ };
+ union {
+ long unsigned int rx_compressed;
+ atomic_long_t __rx_compressed;
+ };
+ union {
+ long unsigned int tx_compressed;
+ atomic_long_t __tx_compressed;
+ };
+};
+
+struct netdev_hw_addr_list {
+ struct list_head list;
+ int count;
+ struct rb_root tree;
+};
+
+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 sfp_bus;
+
+struct udp_tunnel_nic;
+
+struct bpf_xdp_link;
+
+struct bpf_xdp_entity {
+ struct bpf_prog *prog;
+ struct bpf_xdp_link *link;
+};
+
+typedef struct {} netdevice_tracker;
+
+struct net_device_ops;
+
+struct header_ops;
+
+struct netdev_queue;
+
+struct xps_dev_maps;
+
+struct bpf_mprog_entry;
+
+struct pcpu_lstats;
+
+struct pcpu_sw_netstats;
+
+struct pcpu_dstats;
+
+struct inet6_dev;
+
+struct netdev_rx_queue;
+
+struct netdev_name_node;
+
+struct dev_ifalias;
+
+struct xdp_metadata_ops;
+
+struct xsk_tx_metadata_ops;
+
+struct net_device_core_stats;
+
+struct ethtool_ops;
+
+struct l3mdev_ops;
+
+struct ndisc_ops;
+
+struct in_device;
+
+struct vlan_info;
+
+struct cpu_rmap;
+
+struct Qdisc;
+
+struct xdp_dev_bulk_queue;
+
+struct rtnl_link_ops;
+
+struct netdev_stat_ops;
+
+struct netdev_queue_mgmt_ops;
+
+struct netprio_map;
+
+struct phy_link_topology;
+
+struct phy_device;
+
+struct udp_tunnel_nic_info;
+
+struct ethtool_netdev_state;
+
+struct rtnl_hw_stats64;
+
+struct devlink_port;
+
+struct dim_irq_moder;
+
+struct net_device {
+ __u8 __cacheline_group_begin__net_device_read_tx[0];
+ union {
+ struct {
+ long unsigned int priv_flags: 32;
+ long unsigned int lltx: 1;
+ };
+ struct {
+ long unsigned int priv_flags: 32;
+ long unsigned int lltx: 1;
+ } priv_flags_fast;
+ };
+ const struct net_device_ops *netdev_ops;
+ const struct header_ops *header_ops;
+ struct netdev_queue *_tx;
+ netdev_features_t gso_partial_features;
+ unsigned int real_num_tx_queues;
+ unsigned int gso_max_size;
+ unsigned int gso_ipv4_max_size;
+ u16 gso_max_segs;
+ s16 num_tc;
+ unsigned int mtu;
+ short unsigned int needed_headroom;
+ struct netdev_tc_txq tc_to_txq[16];
+ struct xps_dev_maps *xps_maps[2];
+ struct nf_hook_entries *nf_hooks_egress;
+ struct bpf_mprog_entry *tcx_egress;
+ __u8 __cacheline_group_end__net_device_read_tx[0];
+ __u8 __cacheline_group_begin__net_device_read_txrx[0];
+ union {
+ struct pcpu_lstats *lstats;
+ struct pcpu_sw_netstats *tstats;
+ struct pcpu_dstats *dstats;
+ };
+ long unsigned int state;
+ unsigned int flags;
+ short unsigned int hard_header_len;
+ netdev_features_t features;
+ struct inet6_dev *ip6_ptr;
+ __u8 __cacheline_group_end__net_device_read_txrx[0];
+ __u8 __cacheline_group_begin__net_device_read_rx[0];
+ struct bpf_prog *xdp_prog;
+ struct list_head ptype_specific;
+ int ifindex;
+ unsigned int real_num_rx_queues;
+ struct netdev_rx_queue *_rx;
+ long unsigned int gro_flush_timeout;
+ u32 napi_defer_hard_irqs;
+ unsigned int gro_max_size;
+ unsigned int gro_ipv4_max_size;
+ rx_handler_func_t *rx_handler;
+ void *rx_handler_data;
+ possible_net_t nd_net;
+ struct bpf_mprog_entry *tcx_ingress;
+ __u8 __cacheline_group_end__net_device_read_rx[0];
+ char name[16];
+ struct netdev_name_node *name_node;
+ struct dev_ifalias *ifalias;
+ long unsigned int mem_end;
+ long unsigned int mem_start;
+ long unsigned int base_addr;
+ 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 {
+ struct list_head upper;
+ struct list_head lower;
+ } adj_list;
+ xdp_features_t xdp_features;
+ const struct xdp_metadata_ops *xdp_metadata_ops;
+ const struct xsk_tx_metadata_ops *xsk_tx_metadata_ops;
+ short unsigned int gflags;
+ short unsigned int needed_tailroom;
+ 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;
+ unsigned int min_mtu;
+ unsigned int max_mtu;
+ short unsigned int type;
+ unsigned char min_header_len;
+ unsigned char name_assign_type;
+ int group;
+ struct net_device_stats stats;
+ struct net_device_core_stats *core_stats;
+ atomic_t carrier_up_count;
+ atomic_t carrier_down_count;
+ const struct ethtool_ops *ethtool_ops;
+ const struct l3mdev_ops *l3mdev_ops;
+ const struct ndisc_ops *ndisc_ops;
+ unsigned int 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;
+ short unsigned int neigh_priv_len;
+ short unsigned int dev_id;
+ short unsigned int dev_port;
+ int irq;
+ u32 priv_len;
+ spinlock_t addr_list_lock;
+ 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 *ip_ptr;
+ struct vlan_info *vlan_info;
+ const unsigned char *dev_addr;
+ unsigned int num_rx_queues;
+ unsigned int xdp_zc_max_segs;
+ struct netdev_queue *ingress_queue;
+ struct nf_hook_entries *nf_hooks_ingress;
+ unsigned char broadcast[32];
+ struct cpu_rmap *rx_cpu_rmap;
+ struct hlist_node index_hlist;
+ unsigned int num_tx_queues;
+ struct Qdisc *qdisc;
+ unsigned int tx_queue_len;
+ spinlock_t tx_global_lock;
+ struct xdp_dev_bulk_queue *xdp_bulkq;
+ struct hlist_head qdisc_hash[16];
+ struct timer_list watchdog_timer;
+ int watchdog_timeo;
+ u32 proto_down_reason;
+ struct list_head todo_list;
+ int *pcpu_refcnt;
+ struct ref_tracker_dir refcnt_tracker;
+ struct list_head link_watch_list;
+ u8 reg_state;
+ 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 *);
+ void *ml_priv;
+ enum netdev_ml_priv_type ml_priv_type;
+ enum netdev_stat_type pcpu_stat_type: 8;
+ 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;
+ const struct netdev_stat_ops *stat_ops;
+ const struct netdev_queue_mgmt_ops *queue_mgmt_ops;
+ unsigned int tso_max_size;
+ u16 tso_max_segs;
+ u8 prio_tc_map[16];
+ struct netprio_map *priomap;
+ struct phy_link_topology *link_topo;
+ struct phy_device *phydev;
+ struct sfp_bus *sfp_bus;
+ struct lock_class_key *qdisc_tx_busylock;
+ bool proto_down;
+ bool threaded;
+ long unsigned int see_all_hwtstamp_requests: 1;
+ long unsigned int change_proto_down: 1;
+ long unsigned int netns_local: 1;
+ long unsigned int fcoe_mtu: 1;
+ struct list_head net_notifier_list;
+ const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
+ struct udp_tunnel_nic *udp_tunnel_nic;
+ struct ethtool_netdev_state *ethtool;
+ 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;
+ struct hlist_head page_pools;
+ struct dim_irq_moder *irq_moder;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ u8 priv[0];
+};
+
+struct bpf_prog_stats {
+ u64_stats_t cnt;
+ u64_stats_t nsecs;
+ u64_stats_t misses;
+ struct u64_stats_sync syncp;
+ long: 64;
+};
+
+struct sock_fprog_kern {
+ u16 len;
+ struct sock_filter *filter;
+};
+
+struct tc_stats {
+ __u64 bytes;
+ __u32 packets;
+ __u32 drops;
+ __u32 overlimits;
+ __u32 bps;
+ __u32 pps;
+ __u32 qlen;
+ __u32 backlog;
+};
+
+struct tc_sizespec {
+ unsigned char cell_log;
+ unsigned char size_log;
+ short int cell_align;
+ int overhead;
+ unsigned int linklayer;
+ unsigned int mpu;
+ unsigned int mtu;
+ unsigned int tsize;
+};
+
+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 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 skb_shared_hwtstamps {
+ union {
+ ktime_t hwtstamp;
+ void *netdev_data;
+ };
+};
+
+struct skb_ext {
+ refcount_t refcnt;
+ u8 offset[2];
+ u8 chunks;
+ long: 0;
+ char data[0];
+};
+
+struct dql {
+ unsigned int num_queued;
+ unsigned int adj_limit;
+ unsigned int last_obj_cnt;
+ short unsigned int stall_thrs;
+ long unsigned int history_head;
+ long unsigned int history[4];
+ 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;
+ long unsigned int slack_start_time;
+ unsigned int max_limit;
+ unsigned int min_limit;
+ unsigned int slack_hold_time;
+ short unsigned int stall_max;
+ long unsigned int last_reap;
+ long unsigned int stall_cnt;
+};
+
+struct ipstats_mib {
+ u64 mibs[38];
+ struct u64_stats_sync syncp;
+};
+
+struct icmp_mib {
+ long unsigned int mibs[30];
+};
+
+struct icmpmsg_mib {
+ atomic_long_t mibs[512];
+};
+
+struct icmpv6_mib {
+ long unsigned int mibs[7];
+};
+
+struct icmpv6msg_mib {
+ atomic_long_t mibs[512];
+};
+
+struct tcp_mib {
+ long unsigned int mibs[16];
+};
+
+struct udp_mib {
+ long unsigned int mibs[10];
+};
+
+struct linux_mib {
+ long unsigned int mibs[132];
+};
+
+struct inet_frags;
+
+struct fqdir {
+ long int high_thresh;
+ long int low_thresh;
+ int timeout;
+ int max_dist;
+ struct inet_frags *f;
+ struct net *net;
+ bool dead;
+ long: 64;
+ long: 64;
+ struct rhashtable rhashtable;
+ atomic_long_t mem;
+ struct work_struct destroy_work;
+ struct llist_node free_list;
+ long: 64;
+ long: 64;
+};
+
+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;
+};
+
+struct frag_v4_compare_key {
+ __be32 saddr;
+ __be32 daddr;
+ u32 user;
+ u32 vif;
+ __be16 id;
+ u16 protocol;
+};
+
+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 tstamp_type;
+ __u8 flags;
+ u16 max_size;
+ struct fqdir *fqdir;
+ struct callback_head rcu;
+};
+
+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 *, u32, int, 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;
+};
+
+typedef struct {
+ atomic_t refcnt;
+} rcuref_t;
+
+struct xfrm_state;
+
+struct uncached_list;
+
+struct lwtunnel_state;
+
+struct dst_entry {
+ struct net_device *dev;
+ struct dst_ops *ops;
+ long unsigned int _metrics;
+ long unsigned int expires;
+ struct xfrm_state *xfrm;
+ int (*input)(struct sk_buff *);
+ int (*output)(struct net *, struct sock *, struct sk_buff *);
+ short unsigned int flags;
+ short int obsolete;
+ short unsigned int header_len;
+ short unsigned int trailer_len;
+ rcuref_t __rcuref;
+ int __use;
+ long unsigned int lastuse;
+ struct callback_head callback_head;
+ short int error;
+ short int __pad;
+ __u32 tclassid;
+ netdevice_tracker dev_tracker;
+ struct list_head rt_uncached;
+ struct uncached_list *rt_uncached_list;
+ struct lwtunnel_state *lwtstate;
+};
+
+struct hh_cache {
+ unsigned int hh_len;
+ seqlock_t hh_lock;
+ long unsigned int hh_data[12];
+};
+
+struct neigh_table;
+
+struct neigh_parms;
+
+struct neigh_ops;
+
+struct neighbour {
+ struct neighbour *next;
+ struct neigh_table *tbl;
+ struct neigh_parms *parms;
+ long unsigned int confirmed;
+ long unsigned int updated;
+ rwlock_t lock;
+ refcount_t refcnt;
+ unsigned int arp_queue_len_bytes;
+ struct sk_buff_head arp_queue;
+ struct timer_list timer;
+ long unsigned int used;
+ atomic_t probes;
+ u8 nud_state;
+ u8 type;
+ u8 dead;
+ u8 protocol;
+ u32 flags;
+ seqlock_t ha_lock;
+ 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;
+ u8 primary_key[0];
+};
+
+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 netprio_map {
+ struct callback_head rcu;
+ u32 priomap_len;
+ u32 priomap[0];
+};
+
+struct nlmsghdr {
+ __u32 nlmsg_len;
+ __u16 nlmsg_type;
+ __u16 nlmsg_flags;
+ __u32 nlmsg_seq;
+ __u32 nlmsg_pid;
+};
+
+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;
+ const struct netlink_range_validation *range;
+ const struct netlink_range_validation_signed *range_signed;
+ struct {
+ s16 min;
+ s16 max;
+ };
+ int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
+ };
+};
+
+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;
+ int flags;
+ bool strict_check;
+ union {
+ u8 ctx[48];
+ long int args[6];
+ };
+};
+
+struct ndmsg {
+ __u8 ndm_family;
+ __u8 ndm_pad1;
+ __u16 ndm_pad2;
+ __s32 ndm_ifindex;
+ __u16 ndm_state;
+ __u8 ndm_flags;
+ __u8 ndm_type;
+};
+
+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 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;
+};
+
+struct ifla_vf_guid {
+ __u32 vf;
+ __u64 guid;
+};
+
+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_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;
+};
+
+enum netdev_tx {
+ __NETDEV_TX_MIN = -2147483648,
+ NETDEV_TX_OK = 0,
+ NETDEV_TX_BUSY = 16,
+};
+
+typedef enum netdev_tx netdev_tx_t;
+
+struct net_device_core_stats {
+ long unsigned int rx_dropped;
+ long unsigned int tx_dropped;
+ long unsigned int rx_nohandler;
+ long unsigned int rx_otherhost_dropped;
+};
+
+struct header_ops {
+ int (*create)(struct sk_buff *, struct net_device *, short unsigned int, 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 *);
+};
+
+struct gro_list {
+ struct list_head list;
+ int count;
+};
+
+struct napi_struct {
+ struct list_head poll_list;
+ long unsigned int state;
+ int weight;
+ u32 defer_hard_irqs_count;
+ long unsigned int 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;
+ int irq;
+};
+
+struct netdev_queue {
+ struct net_device *dev;
+ netdevice_tracker dev_tracker;
+ struct Qdisc *qdisc;
+ struct Qdisc *qdisc_sleeping;
+ struct kobject kobj;
+ long unsigned int tx_maxrate;
+ atomic_long_t trans_timeout;
+ struct net_device *sb_dev;
+ long: 64;
+ long: 64;
+ struct dql dql;
+ spinlock_t _xmit_lock;
+ int xmit_lock_owner;
+ long unsigned int trans_start;
+ long unsigned int state;
+ struct napi_struct *napi;
+ long: 64;
+};
+
+struct qdisc_skb_head {
+ struct sk_buff *head;
+ struct sk_buff *tail;
+ __u32 qlen;
+ spinlock_t lock;
+};
+
+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 *stab;
+ struct hlist_node hash;
+ u32 handle;
+ u32 parent;
+ struct netdev_queue *dev_queue;
+ struct net_rate_estimator *rate_est;
+ struct gnet_stats_basic_sync *cpu_bstats;
+ struct gnet_stats_queue *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;
+ int owner;
+ long unsigned int state;
+ long unsigned int state2;
+ struct Qdisc *next_sched;
+ struct sk_buff_head skb_bad_txq;
+ 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;
+ struct lock_class_key root_lock_key;
+ long int privdata[0];
+};
+
+struct xps_map {
+ unsigned int len;
+ unsigned int alloc_len;
+ struct callback_head rcu;
+ u16 queues[0];
+};
+
+struct xps_dev_maps {
+ struct callback_head rcu;
+ unsigned int nr_ids;
+ s16 num_tc;
+ struct xps_map *attr_map[0];
+};
+
+struct netdev_phys_item_id {
+ unsigned char id[32];
+ unsigned char id_len;
+};
+
+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;
+ u8 amsdu;
+ } mtk_wdma;
+ };
+};
+
+struct net_device_path_ctx {
+ const struct net_device *dev;
+ u8 daddr[6];
+ int num_vlans;
+ struct {
+ u16 id;
+ __be16 proto;
+ } vlan[2];
+};
+
+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,
+};
+
+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 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 dev_ifalias {
+ struct callback_head rcuhead;
+ char ifalias[0];
+};
+
+struct xdp_frame;
+
+struct xdp_buff;
+
+struct ip_tunnel_parm_kern;
+
+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 *, 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 nlmsghdr *, struct net_device *, 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_del_bulk)(struct net_device *, struct nlattr **, struct netlink_ext_ack *);
+ int (*ndo_mdb_dump)(struct net_device *, struct sk_buff *, struct netlink_callback *);
+ int (*ndo_mdb_get)(struct net_device *, struct nlattr **, u32, u32, struct netlink_ext_ack *);
+ 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_kern *, 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 *);
+};
+
+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_stats_t rx_packets;
+ u64_stats_t rx_bytes;
+ u64_stats_t rx_drops;
+ u64_stats_t tx_packets;
+ u64_stats_t tx_bytes;
+ u64_stats_t tx_drops;
+ struct u64_stats_sync syncp;
+ long: 64;
+ long: 64;
+};
+
+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_L4_ICMP = 256,
+ 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_IPV4_ICMP = 265,
+ 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_ICMP = 266,
+ 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 *);
+ int (*xmo_rx_vlan_tag)(const struct xdp_md *, __be16 *, u16 *);
+};
+
+struct xsk_tx_metadata_ops {
+ void (*tmo_request_timestamp)(void *);
+ u64 (*tmo_fill_timestamp)(void *);
+ void (*tmo_request_checksum)(u16, u16, void *);
+};
+
+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_rxfh_param;
+
+struct ethtool_rxfh_context;
+
+struct ethtool_channels;
+
+struct ethtool_dump;
+
+struct kernel_ethtool_ts_info;
+
+struct ethtool_ts_stats;
+
+struct ethtool_modinfo;
+
+struct ethtool_keee;
+
+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 cap_rss_ctx_supported: 1;
+ u32 cap_rss_sym_xor_supported: 1;
+ u32 rxfh_per_ctx_key: 1;
+ u32 rxfh_indir_space;
+ u16 rxfh_key_space;
+ u16 rxfh_priv_size;
+ u32 rxfh_max_num_contexts;
+ 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 *, struct ethtool_rxfh_param *);
+ int (*set_rxfh)(struct net_device *, struct ethtool_rxfh_param *, struct netlink_ext_ack *);
+ int (*create_rxfh_context)(struct net_device *, struct ethtool_rxfh_context *, const struct ethtool_rxfh_param *, struct netlink_ext_ack *);
+ int (*modify_rxfh_context)(struct net_device *, struct ethtool_rxfh_context *, const struct ethtool_rxfh_param *, struct netlink_ext_ack *);
+ int (*remove_rxfh_context)(struct net_device *, struct ethtool_rxfh_context *, u32, struct netlink_ext_ack *);
+ 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 kernel_ethtool_ts_info *);
+ void (*get_ts_stats)(struct net_device *, struct ethtool_ts_stats *);
+ 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_keee *);
+ int (*set_eee)(struct net_device *, struct ethtool_keee *);
+ 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 *);
+ int (*set_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 *);
+};
+
+struct flowi6;
+
+struct l3mdev_ops {
+ u32 (*l3mdev_fib_table)(const struct net_device *);
+ struct sk_buff * (*l3mdev_l3_rcv)(struct net_device *, struct sk_buff *, u16);
+ struct sk_buff * (*l3mdev_l3_out)(struct net_device *, struct sock *, struct sk_buff *, u16);
+ struct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *, struct flowi6 *);
+};
+
+struct nd_opt_hdr;
+
+struct ndisc_options;
+
+struct prefix_info;
+
+struct ndisc_ops {
+ 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 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 netdev_queue_stats_rx;
+
+struct netdev_queue_stats_tx;
+
+struct netdev_stat_ops {
+ void (*get_queue_stats_rx)(struct net_device *, int, struct netdev_queue_stats_rx *);
+ void (*get_queue_stats_tx)(struct net_device *, int, struct netdev_queue_stats_tx *);
+ void (*get_base_stats)(struct net_device *, struct netdev_queue_stats_rx *, struct netdev_queue_stats_tx *);
+};
+
+struct netdev_queue_mgmt_ops {
+ size_t ndo_queue_mem_size;
+ int (*ndo_queue_mem_alloc)(struct net_device *, void *, int);
+ void (*ndo_queue_mem_free)(struct net_device *, void *);
+ int (*ndo_queue_start)(struct net_device *, void *, int);
+ int (*ndo_queue_stop)(struct net_device *, void *, int);
+};
+
+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 tcmsg {
+ unsigned char tcm_family;
+ unsigned char tcm__pad1;
+ short unsigned int tcm__pad2;
+ int tcm_ifindex;
+ __u32 tcm_handle;
+ __u32 tcm_parent;
+ __u32 tcm_info;
+};
+
+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 netlink_range_validation {
+ u64 min;
+ u64 max;
+};
+
+struct netlink_range_validation_signed {
+ s64 min;
+ s64 max;
+};
+
+enum flow_action_hw_stats_bit {
+ FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
+ FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
+ FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
+ FLOW_ACTION_HW_STATS_NUM_BITS = 3,
+};
+
+struct flow_block {
+ struct list_head cb_list;
+};
+
+typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
+
+struct qdisc_size_table {
+ struct callback_head rcu;
+ struct list_head list;
+ struct tc_sizespec szopts;
+ int refcnt;
+ u16 data[0];
+};
+
+struct Qdisc_class_ops;
+
+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;
+};
+
+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 *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
+ struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
+ void (*qlen_notify)(struct Qdisc *, long unsigned int);
+ long unsigned int (*find)(struct Qdisc *, u32);
+ int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
+ int (*delete)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+ void (*walk)(struct Qdisc *, struct qdisc_walker *);
+ struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+ long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
+ void (*unbind_tcf)(struct Qdisc *, long unsigned int);
+ int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
+ int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
+};
+
+struct tcf_chain;
+
+struct tcf_block {
+ struct xarray ports;
+ 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;
+ bool bypass_wanted;
+ atomic_t filtercnt;
+ atomic_t skipswcnt;
+ 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_result;
+
+struct tcf_proto_ops;
+
+struct tcf_proto {
+ struct tcf_proto *next;
+ void *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;
+ bool counted;
+ refcount_t refcnt;
+ struct callback_head rcu;
+ struct hlist_node destroy_ht_node;
+};
+
+struct tcf_result {
+ union {
+ struct {
+ long unsigned int class;
+ u32 classid;
+ };
+ const struct tcf_proto *goto_tp;
+ };
+};
+
+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 *, long unsigned int, 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, long unsigned int, void *, long unsigned int);
+ 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 tcf_chain {
+ struct mutex filter_chain_lock;
+ struct tcf_proto *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;
+};
+
+enum work_flags {
+ WORK_STRUCT_PENDING = 1,
+ WORK_STRUCT_INACTIVE = 2,
+ WORK_STRUCT_PWQ = 4,
+ WORK_STRUCT_LINKED = 8,
+ WORK_STRUCT_STATIC = 0,
+};
+
+enum wq_misc_consts {
+ WORK_NR_COLORS = 16,
+ WORK_CPU_UNBOUND = 64,
+ WORK_BUSY_PENDING = 1,
+ WORK_BUSY_RUNNING = 2,
+ WORKER_DESC_LEN = 32,
+};
+
+enum umh_disable_depth {
+ UMH_ENABLED = 0,
+ UMH_FREEZING = 1,
+ UMH_DISABLED = 2,
+};
+
+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 {
+ int mode;
+ void *cb_data;
+ const char *cmd;
+ struct device *dev;
+};
+
+typedef void (*dr_release_t)(struct device *, void *);
+
+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 device *dev;
+};
+
+struct semaphore {
+ raw_spinlock_t lock;
+ unsigned int count;
+ struct list_head wait_list;
+};
+
+struct semaphore_waiter {
+ struct list_head list;
+ struct task_struct *task;
+ bool up;
+};
+
+struct ww_acquire_ctx;
+
+struct mutex_waiter {
+ struct list_head list;
+ struct task_struct *task;
+ struct ww_acquire_ctx *ww_ctx;
+ void *magic;
+};
+
+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 pm_vt_switch {
+ struct list_head head;
+ struct device *dev;
+ bool required;
+};
+
+typedef void (*rcu_callback_t)(struct callback_head *);
+
+enum lockdep_wait_type {
+ LD_WAIT_INV = 0,
+ LD_WAIT_FREE = 1,
+ LD_WAIT_SPIN = 2,
+ LD_WAIT_CONFIG = 2,
+ LD_WAIT_SLEEP = 3,
+ LD_WAIT_MAX = 4,
+};
+
+typedef struct {
+ void *lock;
+} class_rcu_t;
+
+struct maple_alloc {
+ long unsigned int total;
+ unsigned char node_count;
+ unsigned int request_count;
+ struct maple_alloc *slot[30];
+};
+
+struct maple_enode;
+
+enum store_type {
+ wr_invalid = 0,
+ wr_new_root = 1,
+ wr_store_root = 2,
+ wr_exact_fit = 3,
+ wr_spanning_store = 4,
+ wr_split_store = 5,
+ wr_rebalance = 6,
+ wr_append = 7,
+ wr_node_store = 8,
+ wr_slot_store = 9,
+};
+
+enum maple_status {
+ ma_active = 0,
+ ma_start = 1,
+ ma_root = 2,
+ ma_none = 3,
+ ma_pause = 4,
+ ma_overflow = 5,
+ ma_underflow = 6,
+ ma_error = 7,
+};
+
+struct ma_state {
+ struct maple_tree *tree;
+ long unsigned int index;
+ long unsigned int last;
+ struct maple_enode *node;
+ long unsigned int min;
+ long unsigned int max;
+ struct maple_alloc *alloc;
+ enum maple_status status;
+ unsigned char depth;
+ unsigned char offset;
+ unsigned char mas_flags;
+ unsigned char end;
+ enum store_type store_type;
+};
+
+struct irq_affinity_desc {
+ struct cpumask mask;
+ unsigned int is_managed: 1;
+};
+
+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 {
+ 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 kernel_stat {
+ long unsigned int irqs_sum;
+ unsigned int softirqs[10];
+};
+
+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 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,
+};
+
+struct irq_domain_chip_generic_info {
+ const char *name;
+ irq_flow_handler_t handler;
+ unsigned int irqs_per_chip;
+ unsigned int num_ct;
+ unsigned int irq_flags_to_clear;
+ unsigned int irq_flags_to_set;
+ enum irq_gc_flags gc_flags;
+ int (*init)(struct irq_chip_generic *);
+ void (*exit)(struct irq_chip_generic *);
+};
+
+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_DESTROY_GC = 1024,
+ IRQ_DOMAIN_FLAG_NONCORE = 65536,
+};
+
+enum {
+ IRQCHIP_FWNODE_REAL = 0,
+ IRQCHIP_FWNODE_NAMED = 1,
+ IRQCHIP_FWNODE_NAMED_ID = 2,
+};
+
+struct irq_domain_info {
+ struct fwnode_handle *fwnode;
+ unsigned int domain_flags;
+ unsigned int size;
+ irq_hw_number_t hwirq_max;
+ int direct_max;
+ unsigned int hwirq_base;
+ unsigned int virq_base;
+ enum irq_domain_bus_token bus_token;
+ const char *name_suffix;
+ const struct irq_domain_ops *ops;
+ void *host_data;
+ struct irq_domain *parent;
+ struct irq_domain_chip_generic_info *dgc_info;
+ int (*init)(struct irq_domain *);
+ void (*exit)(struct irq_domain *);
+};
+
+struct ipi_mux_cpu {
+ atomic_t enable;
+ atomic_t bits;
+};
+
+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_HOST_SEV_SNP = 6,
+};
+
+struct static_key_false {
+ struct static_key key;
+};
+
+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_owner_priv_1 = 10,
+ PG_owner_2 = 11,
+ PG_arch_1 = 12,
+ PG_reserved = 13,
+ PG_private = 14,
+ PG_private_2 = 15,
+ PG_reclaim = 16,
+ PG_swapbacked = 17,
+ PG_unevictable = 18,
+ PG_mlocked = 19,
+ __NR_PAGEFLAGS = 20,
+ PG_readahead = 16,
+ PG_swapcache = 10,
+ PG_checked = 10,
+ PG_anon_exclusive = 11,
+ PG_mappedtodisk = 11,
+ PG_fscache = 15,
+ PG_pinned = 10,
+ PG_savepinned = 4,
+ PG_foreign = 10,
+ PG_xen_remapped = 10,
+ PG_isolated = 16,
+ PG_reported = 3,
+ PG_has_hwpoisoned = 8,
+ PG_large_rmappable = 9,
+ PG_partially_mapped = 16,
+};
+
+struct io_tlb_area;
+
+struct io_tlb_slot;
+
+struct io_tlb_pool {
+ phys_addr_t start;
+ phys_addr_t end;
+ void *vaddr;
+ long unsigned int nslabs;
+ bool late_alloc;
+ unsigned int nareas;
+ unsigned int area_nslabs;
+ struct io_tlb_area *areas;
+ struct io_tlb_slot *slots;
+};
+
+struct io_tlb_mem {
+ struct io_tlb_pool defpool;
+ long unsigned int nslabs;
+ struct dentry *debugfs;
+ bool force_bounce;
+ bool for_alloc;
+ atomic_long_t total_used;
+ atomic_long_t used_hiwater;
+ atomic_long_t transient_nslabs;
+};
+
+enum dma_data_direction {
+ DMA_BIDIRECTIONAL = 0,
+ DMA_TO_DEVICE = 1,
+ DMA_FROM_DEVICE = 2,
+ DMA_NONE = 3,
+};
+
+struct io_tlb_area {
+ long unsigned int used;
+ unsigned int index;
+ spinlock_t lock;
+};
+
+struct io_tlb_slot {
+ phys_addr_t orig_addr;
+ size_t alloc_size;
+ short unsigned int list;
+ short unsigned int pad_slots;
+};
+
+struct module_use {
+ struct list_head source_list;
+ struct list_head target_list;
+ struct module *source;
+ struct module *target;
+};
+
+enum {
+ PROC_ENTRY_PERMANENT = 1,
+};
+
+struct proc_ops {
+ unsigned int proc_flags;
+ int (*proc_open)(struct inode *, struct file *);
+ ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
+ ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
+ ssize_t (*proc_write)(struct file *, const char *, 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 int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
+ long int (*proc_compat_ioctl)(struct file *, unsigned int, long unsigned int);
+ int (*proc_mmap)(struct file *, struct vm_area_struct *);
+ long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+};
+
+typedef u64 uint64_t;
+
+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 timer_events {
+ u64 local;
+ u64 global;
+};
+
+struct timer_base {
+ raw_spinlock_t lock;
+ struct timer_list *running_timer;
+ long unsigned int clk;
+ long unsigned int next_expiry;
+ unsigned int cpu;
+ bool next_expiry_recalc;
+ bool is_idle;
+ bool timers_pending;
+ long unsigned int pending_map[9];
+ struct hlist_head vectors[576];
+};
+
+struct process_timer {
+ struct timer_list timer;
+ struct task_struct *task;
+};
+
+typedef __kernel_timer_t timer_t;
+
+typedef unsigned int uint;
+
+struct itimerspec64 {
+ struct timespec64 it_interval;
+ struct timespec64 it_value;
+};
+
+struct __kernel_timex_timeval {
+ __kernel_time64_t tv_sec;
+ long long int tv_usec;
+};
+
+struct __kernel_timex {
+ unsigned int modes;
+ long long int offset;
+ long long int freq;
+ long long int maxerror;
+ long long int esterror;
+ int status;
+ long long int constant;
+ long long int precision;
+ long long int tolerance;
+ struct __kernel_timex_timeval time;
+ long long int tick;
+ long long int ppsfreq;
+ long long int jitter;
+ int shift;
+ long long int stabil;
+ long long int jitcnt;
+ long long int calcnt;
+ long long int errcnt;
+ long long int stbcnt;
+ int tai;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+enum alarmtimer_type {
+ ALARM_REALTIME = 0,
+ ALARM_BOOTTIME = 1,
+ ALARM_NUMTYPE = 2,
+ ALARM_REALTIME_FREEZER = 3,
+ ALARM_BOOTTIME_FREEZER = 4,
+};
+
+enum alarmtimer_restart {
+ ALARMTIMER_NORESTART = 0,
+ ALARMTIMER_RESTART = 1,
+};
+
+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;
+};
+
+struct cpu_timer {
+ struct timerqueue_node node;
+ struct timerqueue_head *head;
+ struct pid *pid;
+ struct list_head elist;
+ int firing;
+ struct task_struct *handling;
+};
+
+struct k_clock;
+
+struct k_itimer {
+ struct hlist_node 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 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 *);
+};
+
+typedef struct poll_table_struct poll_table;
+
+struct posix_clock;
+
+struct posix_clock_context;
+
+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 int (*ioctl)(struct posix_clock_context *, unsigned int, long unsigned int);
+ int (*open)(struct posix_clock_context *, fmode_t);
+ __poll_t (*poll)(struct posix_clock_context *, struct file *, poll_table *);
+ int (*release)(struct posix_clock_context *);
+ ssize_t (*read)(struct posix_clock_context *, uint, char *, 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_context {
+ struct posix_clock *clk;
+ void *private_clkdata;
+};
+
+struct posix_clock_desc {
+ struct file *fp;
+ struct posix_clock *clk;
+};
+
+enum tick_device_mode {
+ TICKDEV_MODE_PERIODIC = 0,
+ TICKDEV_MODE_ONESHOT = 1,
+};
+
+struct clock_event_device;
+
+struct tick_device {
+ struct clock_event_device *evtdev;
+ enum tick_device_mode mode;
+};
+
+typedef struct {
+ unsigned int __softirq_pending;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+} irq_cpustat_t;
+
+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)(long unsigned int, 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;
+ long unsigned int 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 *);
+ long unsigned int min_delta_ticks;
+ long unsigned int 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 tick_sched {
+ long unsigned int flags;
+ unsigned int stalled_jiffies;
+ long unsigned int last_tick_jiffies;
+ struct hrtimer sched_timer;
+ ktime_t last_tick;
+ ktime_t next_tick;
+ long unsigned int idle_jiffies;
+ ktime_t idle_waketime;
+ unsigned int got_idle_tick;
+ seqcount_t idle_sleeptime_seq;
+ ktime_t idle_entrytime;
+ long unsigned int last_jiffies;
+ u64 timer_expires_base;
+ u64 timer_expires;
+ u64 next_timer;
+ ktime_t idle_expires;
+ long unsigned int idle_calls;
+ long unsigned int idle_sleeps;
+ ktime_t idle_exittime;
+ ktime_t idle_sleeptime;
+ ktime_t iowait_sleeptime;
+ atomic_t tick_dep_mask;
+ long unsigned int check_clocks;
+};
+
+struct plist_head {
+ struct list_head node_list;
+};
+
+struct robust_list {
+ struct robust_list *next;
+};
+
+struct robust_list_head {
+ struct robust_list list;
+ long int futex_offset;
+ struct robust_list *list_op_pending;
+};
+
+struct rt_mutex_base {
+ raw_spinlock_t wait_lock;
+ struct rb_root_cached waiters;
+ struct task_struct *owner;
+};
+
+union futex_key {
+ struct {
+ u64 i_seq;
+ long unsigned int pgoff;
+ unsigned int offset;
+ } shared;
+ struct {
+ union {
+ struct mm_struct *mm;
+ u64 __tmp;
+ };
+ long unsigned int address;
+ unsigned int offset;
+ } private;
+ struct {
+ u64 ptr;
+ long unsigned int 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 hrtimer_sleeper {
+ struct hrtimer timer;
+ struct task_struct *task;
+};
+
+struct futex_waitv {
+ __u64 val;
+ __u64 uaddr;
+ __u32 flags;
+ __u32 __reserved;
+};
+
+struct wake_q_head {
+ struct wake_q_node *first;
+ struct wake_q_node **lastp;
+};
+
+struct futex_hash_bucket {
+ atomic_t waiters;
+ spinlock_t lock;
+ struct plist_head chain;
+ long: 64;
+ long: 64;
+};
+
+struct futex_q;
+
+typedef void futex_wake_fn(struct wake_q_head *, struct futex_q *);
+
+struct futex_q {
+ struct plist_node list;
+ struct task_struct *task;
+ spinlock_t *lock_ptr;
+ futex_wake_fn *wake;
+ void *wake_data;
+ 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;
+};
+
+enum futex_access {
+ FUTEX_READ = 0,
+ FUTEX_WRITE = 1,
+};
+
+struct futex_vector {
+ struct futex_waitv w;
+ struct futex_q q;
+};
+
+typedef void (*swap_func_t)(void *, void *, int);
+
+typedef int (*cmp_func_t)(const void *, const void *);
+
+struct cgroupstats {
+ __u64 nr_sleeping;
+ __u64 nr_running;
+ __u64 nr_stopped;
+ __u64 nr_uninterruptible;
+ __u64 nr_io_wait;
+};
+
+enum {
+ __PERCPU_REF_ATOMIC = 1,
+ __PERCPU_REF_DEAD = 2,
+ __PERCPU_REF_ATOMIC_DEAD = 3,
+ __PERCPU_REF_FLAG_BITS = 2,
+};
+
+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 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 audit_names;
+
+struct filename {
+ const char *name;
+ const char *uptr;
+ atomic_t refcnt;
+ struct audit_names *aname;
+ const char iname[0];
+};
+
+enum kernfs_node_type {
+ KERNFS_DIR = 1,
+ KERNFS_FILE = 2,
+ KERNFS_LINK = 4,
+};
+
+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 *);
+};
+
+struct kernfs_fs_context {
+ struct kernfs_root *root;
+ void *ns_tag;
+ long unsigned int magic;
+ bool new_sb_created;
+};
+
+enum {
+ CSS_NO_REF = 1,
+ CSS_ONLINE = 2,
+ CSS_RELEASED = 4,
+ CSS_VISIBLE = 8,
+ CSS_DYING = 16,
+};
+
+enum {
+ CGRP_NOTIFY_ON_RELEASE = 0,
+ CGRP_CPUSET_CLONE_CHILDREN = 1,
+ CGRP_FREEZE = 2,
+ CGRP_FROZEN = 3,
+ CGRP_KILL = 4,
+};
+
+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,
+ CGRP_ROOT_MEMORY_HUGETLB_ACCOUNTING = 524288,
+ CGRP_ROOT_PIDS_LOCAL_EVENTS = 1048576,
+};
+
+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,
+};
+
+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 cgroup_of_peak {
+ long unsigned int value;
+ struct list_head list;
+};
+
+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;
+};
+
+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 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 fc_log {
+ refcount_t usage;
+ u8 head;
+ u8 tail;
+ u8 need_free;
+ struct module *owner;
+ char *buffer[8];
+};
+
+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 *);
+};
+
+struct fs_parse_result {
+ bool negated;
+ union {
+ bool boolean;
+ int int_32;
+ unsigned int uint_32;
+ u64 uint_64;
+ kuid_t uid;
+ kgid_t gid;
+ };
+};
+
+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;
+};
+
+enum cgroup_filetype {
+ CGROUP_FILE_PROCS = 0,
+ CGROUP_FILE_TASKS = 1,
+};
+
+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 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 cgroup_of_peak peak;
+};
+
+struct cgrp_cset_link {
+ struct cgroup *cgrp;
+ struct css_set *cset;
+ struct list_head cset_link;
+ struct list_head cgrp_link;
+};
+
+struct cgroup_mgctx {
+ struct list_head preloaded_src_csets;
+ struct list_head preloaded_dst_csets;
+ struct cgroup_taskset tset;
+ u16 ss_mask;
+};
+
+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 = 8,
+ Opt_nofavordynmods = 9,
+};
+
+typedef int __kernel_mqd_t;
+
+typedef __u64 __be64;
+
+typedef __kernel_mqd_t mqd_t;
+
+typedef unsigned int slab_flags_t;
+
+struct hlist_nulls_node {
+ struct hlist_nulls_node *next;
+ struct hlist_nulls_node **pprev;
+};
+
+enum audit_state {
+ AUDIT_STATE_DISABLED = 0,
+ AUDIT_STATE_BUILD = 1,
+ AUDIT_STATE_RECORD = 2,
+};
+
+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 audit_names {
+ struct list_head list;
+ struct filename *name;
+ int name_len;
+ bool hidden;
+ long unsigned int 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 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 open_how {
+ __u64 flags;
+ __u64 mode;
+ __u64 resolve;
+};
+
+struct audit_ntp_val {
+ long long int oldval;
+ long long int newval;
+};
+
+struct audit_ntp_data {
+ struct audit_ntp_val vals[6];
+};
+
+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;
+ long unsigned int argv[4];
+ long int 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;
+ long unsigned int 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 int 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;
+ long unsigned int 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;
+};
+
+enum _slab_flag_bits {
+ _SLAB_CONSISTENCY_CHECKS = 0,
+ _SLAB_RED_ZONE = 1,
+ _SLAB_POISON = 2,
+ _SLAB_KMALLOC = 3,
+ _SLAB_HWCACHE_ALIGN = 4,
+ _SLAB_CACHE_DMA = 5,
+ _SLAB_CACHE_DMA32 = 6,
+ _SLAB_STORE_USER = 7,
+ _SLAB_PANIC = 8,
+ _SLAB_TYPESAFE_BY_RCU = 9,
+ _SLAB_TRACE = 10,
+ _SLAB_NOLEAKTRACE = 11,
+ _SLAB_NO_MERGE = 12,
+ _SLAB_ACCOUNT = 13,
+ _SLAB_NO_USER_FLAGS = 14,
+ _SLAB_RECLAIM_ACCOUNT = 15,
+ _SLAB_OBJECT_POISON = 16,
+ _SLAB_CMPXCHG_DOUBLE = 17,
+ _SLAB_NO_OBJ_EXT = 18,
+ _SLAB_FLAGS_LAST_BIT = 19,
+};
+
+struct kmem_cache_args {
+ unsigned int align;
+ unsigned int useroffset;
+ unsigned int usersize;
+ unsigned int freeptr_offset;
+ bool use_freeptr_offset;
+ void (*ctor)(void *);
+};
+
+typedef __u64 __addrpair;
+
+typedef __u32 __portpair;
+
+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;
+ };
+ };
+ short unsigned int 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 {
+ long unsigned int 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;
+ };
+ short unsigned int skc_tx_queue_mapping;
+ short unsigned int 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;
+
+struct sock_cgroup_data {
+ struct cgroup *cgroup;
+ u32 classid;
+ u16 prioidx;
+};
+
+typedef struct {} netns_tracker;
+
+struct sk_filter;
+
+struct socket_wq;
+
+struct socket;
+
+struct xfrm_policy;
+
+struct sock_reuseport;
+
+struct sock {
+ struct sock_common __sk_common;
+ __u8 __cacheline_group_begin__sock_write_rx[0];
+ atomic_t sk_drops;
+ __s32 sk_peek_off;
+ 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;
+ __u8 __cacheline_group_end__sock_write_rx[0];
+ __u8 __cacheline_group_begin__sock_read_rx[0];
+ struct dst_entry *sk_rx_dst;
+ int sk_rx_dst_ifindex;
+ u32 sk_rx_dst_cookie;
+ unsigned int sk_ll_usec;
+ unsigned int sk_napi_id;
+ u16 sk_busy_poll_budget;
+ u8 sk_prefer_busy_poll;
+ u8 sk_userlocks;
+ int sk_rcvbuf;
+ struct sk_filter *sk_filter;
+ union {
+ struct socket_wq *sk_wq;
+ struct socket_wq *sk_wq_raw;
+ };
+ void (*sk_data_ready)(struct sock *);
+ long int sk_rcvtimeo;
+ int sk_rcvlowat;
+ __u8 __cacheline_group_end__sock_read_rx[0];
+ __u8 __cacheline_group_begin__sock_read_rxtx[0];
+ int sk_err;
+ struct socket *sk_socket;
+ struct mem_cgroup *sk_memcg;
+ struct xfrm_policy *sk_policy[2];
+ __u8 __cacheline_group_end__sock_read_rxtx[0];
+ __u8 __cacheline_group_begin__sock_write_rxtx[0];
+ socket_lock_t sk_lock;
+ u32 sk_reserved_mem;
+ int sk_forward_alloc;
+ u32 sk_tsflags;
+ __u8 __cacheline_group_end__sock_write_rxtx[0];
+ __u8 __cacheline_group_begin__sock_write_tx[0];
+ int sk_write_pending;
+ atomic_t sk_omem_alloc;
+ int sk_sndbuf;
+ int sk_wmem_queued;
+ refcount_t sk_wmem_alloc;
+ long unsigned int sk_tsq_flags;
+ union {
+ struct sk_buff *sk_send_head;
+ struct rb_root tcp_rtx_queue;
+ };
+ struct sk_buff_head sk_write_queue;
+ u32 sk_dst_pending_confirm;
+ u32 sk_pacing_status;
+ struct page_frag sk_frag;
+ struct timer_list sk_timer;
+ long unsigned int sk_pacing_rate;
+ atomic_t sk_zckey;
+ atomic_t sk_tskey;
+ __u8 __cacheline_group_end__sock_write_tx[0];
+ __u8 __cacheline_group_begin__sock_read_tx[0];
+ long unsigned int sk_max_pacing_rate;
+ long int sk_sndtimeo;
+ u32 sk_priority;
+ u32 sk_mark;
+ struct dst_entry *sk_dst_cache;
+ netdev_features_t sk_route_caps;
+ u16 sk_gso_type;
+ u16 sk_gso_max_segs;
+ unsigned int sk_gso_max_size;
+ gfp_t sk_allocation;
+ u32 sk_txhash;
+ u8 sk_pacing_shift;
+ bool sk_use_task_frag;
+ __u8 __cacheline_group_end__sock_read_tx[0];
+ u8 sk_gso_disabled: 1;
+ u8 sk_kern_sock: 1;
+ u8 sk_no_check_tx: 1;
+ u8 sk_no_check_rx: 1;
+ u8 sk_shutdown;
+ u16 sk_type;
+ u16 sk_protocol;
+ long unsigned int sk_lingertime;
+ struct proto *sk_prot_creator;
+ rwlock_t sk_callback_lock;
+ int sk_err_soft;
+ u32 sk_ack_backlog;
+ u32 sk_max_ack_backlog;
+ kuid_t sk_uid;
+ spinlock_t sk_peer_lock;
+ int sk_bind_phc;
+ struct pid *sk_peer_pid;
+ const struct cred *sk_peer_cred;
+ ktime_t sk_stamp;
+ int sk_disconnects;
+ u8 sk_txrehash;
+ u8 sk_clockid;
+ u8 sk_txtime_deadline_mode: 1;
+ u8 sk_txtime_report_errors: 1;
+ u8 sk_txtime_unused: 6;
+ void *sk_user_data;
+ void *sk_security;
+ struct sock_cgroup_data sk_cgrp_data;
+ void (*sk_state_change)(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 *sk_reuseport_cb;
+ struct bpf_local_storage *sk_bpf_storage;
+ struct callback_head sk_rcu;
+ netns_tracker ns_tracker;
+ struct xarray sk_user_frags;
+};
+
+struct __kernel_sockaddr_storage {
+ union {
+ struct {
+ __kernel_sa_family_t ss_family;
+ char __data[126];
+ };
+ void *__align;
+ };
+};
+
+struct ubuf_info;
+
+struct msghdr {
+ void *msg_name;
+ int msg_namelen;
+ int msg_inq;
+ struct iov_iter msg_iter;
+ union {
+ void *msg_control;
+ void *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 sk_buff *, struct iov_iter *, size_t);
+};
+
+struct ubuf_info_ops;
+
+struct ubuf_info {
+ const struct ubuf_info_ops *ops;
+ refcount_t refcnt;
+ u8 flags;
+};
+
+typedef struct {
+ union {
+ void *kernel;
+ void *user;
+ };
+ bool is_kernel: 1;
+} sockptr_t;
+
+enum audit_nlgrps {
+ AUDIT_NLGRP_NONE = 0,
+ AUDIT_NLGRP_READLOG = 1,
+ __AUDIT_NLGRP_MAX = 2,
+};
+
+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_features {
+ __u32 vers;
+ __u32 mask;
+ __u32 features;
+ __u32 lock;
+};
+
+struct audit_tty_status {
+ __u32 enabled;
+ __u32 log_passwd;
+};
+
+struct audit_sig_info {
+ uid_t uid;
+ pid_t pid;
+ char ctx[0];
+};
+
+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 flowi6 {
+ struct flowi_common __fl_common;
+ struct in6_addr daddr;
+ struct in6_addr saddr;
+ __be32 flowlabel;
+ union flowi_uli uli;
+ __u32 mp_hash;
+};
+
+struct prot_inuse {
+ int all;
+ int val[64];
+};
+
+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 {
+ 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 {
+ 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,
+};
+
+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 {
+ 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,
+};
+
+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_TCPAOREQUIRED = 127,
+ LINUX_MIB_TCPAOBAD = 128,
+ LINUX_MIB_TCPAOKEYNOTFOUND = 129,
+ LINUX_MIB_TCPAOGOOD = 130,
+ LINUX_MIB_TCPAODROPPEDICMPS = 131,
+ __LINUX_MIB_MAX = 132,
+};
+
+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_XFRMOUTSTATEDIRERROR = 29,
+ LINUX_MIB_XFRMINSTATEDIRERROR = 30,
+ __LINUX_MIB_XFRMMAX = 31,
+};
+
+enum {
+ LINUX_MIB_TLSNUM = 0,
+ LINUX_MIB_TLSCURRTXSW = 1,
+ LINUX_MIB_TLSCURRRXSW = 2,
+ LINUX_MIB_TLSCURRTXDEVICE = 3,
+ LINUX_MIB_TLSCURRRXDEVICE = 4,
+ LINUX_MIB_TLSTXSW = 5,
+ LINUX_MIB_TLSRXSW = 6,
+ LINUX_MIB_TLSTXDEVICE = 7,
+ LINUX_MIB_TLSRXDEVICE = 8,
+ LINUX_MIB_TLSDECRYPTERROR = 9,
+ LINUX_MIB_TLSRXDEVICERESYNC = 10,
+ LINUX_MIB_TLSDECRYPTRETRY = 11,
+ LINUX_MIB_TLSRXNOPADVIOL = 12,
+ __LINUX_MIB_TLSMAX = 13,
+};
+
+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_AUTH_HDR = 18,
+ SKB_DROP_REASON_TCP_MD5NOTFOUND = 19,
+ SKB_DROP_REASON_TCP_MD5UNEXPECTED = 20,
+ SKB_DROP_REASON_TCP_MD5FAILURE = 21,
+ SKB_DROP_REASON_TCP_AONOTFOUND = 22,
+ SKB_DROP_REASON_TCP_AOUNEXPECTED = 23,
+ SKB_DROP_REASON_TCP_AOKEYNOTFOUND = 24,
+ SKB_DROP_REASON_TCP_AOFAILURE = 25,
+ SKB_DROP_REASON_SOCKET_BACKLOG = 26,
+ SKB_DROP_REASON_TCP_FLAGS = 27,
+ SKB_DROP_REASON_TCP_ABORT_ON_DATA = 28,
+ SKB_DROP_REASON_TCP_ZEROWINDOW = 29,
+ SKB_DROP_REASON_TCP_OLD_DATA = 30,
+ SKB_DROP_REASON_TCP_OVERWINDOW = 31,
+ SKB_DROP_REASON_TCP_OFOMERGE = 32,
+ SKB_DROP_REASON_TCP_RFC7323_PAWS = 33,
+ SKB_DROP_REASON_TCP_OLD_SEQUENCE = 34,
+ SKB_DROP_REASON_TCP_INVALID_SEQUENCE = 35,
+ SKB_DROP_REASON_TCP_INVALID_ACK_SEQUENCE = 36,
+ SKB_DROP_REASON_TCP_RESET = 37,
+ SKB_DROP_REASON_TCP_INVALID_SYN = 38,
+ SKB_DROP_REASON_TCP_CLOSE = 39,
+ SKB_DROP_REASON_TCP_FASTOPEN = 40,
+ SKB_DROP_REASON_TCP_OLD_ACK = 41,
+ SKB_DROP_REASON_TCP_TOO_OLD_ACK = 42,
+ SKB_DROP_REASON_TCP_ACK_UNSENT_DATA = 43,
+ SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE = 44,
+ SKB_DROP_REASON_TCP_OFO_DROP = 45,
+ SKB_DROP_REASON_IP_OUTNOROUTES = 46,
+ SKB_DROP_REASON_BPF_CGROUP_EGRESS = 47,
+ SKB_DROP_REASON_IPV6DISABLED = 48,
+ SKB_DROP_REASON_NEIGH_CREATEFAIL = 49,
+ SKB_DROP_REASON_NEIGH_FAILED = 50,
+ SKB_DROP_REASON_NEIGH_QUEUEFULL = 51,
+ SKB_DROP_REASON_NEIGH_DEAD = 52,
+ SKB_DROP_REASON_TC_EGRESS = 53,
+ SKB_DROP_REASON_SECURITY_HOOK = 54,
+ SKB_DROP_REASON_QDISC_DROP = 55,
+ SKB_DROP_REASON_CPU_BACKLOG = 56,
+ SKB_DROP_REASON_XDP = 57,
+ SKB_DROP_REASON_TC_INGRESS = 58,
+ SKB_DROP_REASON_UNHANDLED_PROTO = 59,
+ SKB_DROP_REASON_SKB_CSUM = 60,
+ SKB_DROP_REASON_SKB_GSO_SEG = 61,
+ SKB_DROP_REASON_SKB_UCOPY_FAULT = 62,
+ SKB_DROP_REASON_DEV_HDR = 63,
+ SKB_DROP_REASON_DEV_READY = 64,
+ SKB_DROP_REASON_FULL_RING = 65,
+ SKB_DROP_REASON_NOMEM = 66,
+ SKB_DROP_REASON_HDR_TRUNC = 67,
+ SKB_DROP_REASON_TAP_FILTER = 68,
+ SKB_DROP_REASON_TAP_TXFILTER = 69,
+ SKB_DROP_REASON_ICMP_CSUM = 70,
+ SKB_DROP_REASON_INVALID_PROTO = 71,
+ SKB_DROP_REASON_IP_INADDRERRORS = 72,
+ SKB_DROP_REASON_IP_INNOROUTES = 73,
+ SKB_DROP_REASON_PKT_TOO_BIG = 74,
+ SKB_DROP_REASON_DUP_FRAG = 75,
+ SKB_DROP_REASON_FRAG_REASM_TIMEOUT = 76,
+ SKB_DROP_REASON_FRAG_TOO_FAR = 77,
+ SKB_DROP_REASON_TCP_MINTTL = 78,
+ SKB_DROP_REASON_IPV6_BAD_EXTHDR = 79,
+ SKB_DROP_REASON_IPV6_NDISC_FRAG = 80,
+ SKB_DROP_REASON_IPV6_NDISC_HOP_LIMIT = 81,
+ SKB_DROP_REASON_IPV6_NDISC_BAD_CODE = 82,
+ SKB_DROP_REASON_IPV6_NDISC_BAD_OPTIONS = 83,
+ SKB_DROP_REASON_IPV6_NDISC_NS_OTHERHOST = 84,
+ SKB_DROP_REASON_QUEUE_PURGE = 85,
+ SKB_DROP_REASON_TC_COOKIE_ERROR = 86,
+ SKB_DROP_REASON_PACKET_SOCK_ERROR = 87,
+ SKB_DROP_REASON_TC_CHAIN_NOTFOUND = 88,
+ SKB_DROP_REASON_TC_RECLASSIFY_LOOP = 89,
+ SKB_DROP_REASON_MAX = 90,
+ SKB_DROP_REASON_SUBSYS_MASK = 4294901760,
+};
+
+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;
+};
+
+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,
+};
+
+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 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 ip_conntrack_dir {
+ IP_CT_DIR_ORIGINAL = 0,
+ IP_CT_DIR_REPLY = 1,
+ IP_CT_DIR_MAX = 2,
+};
+
+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,
+};
+
+enum udp_conntrack {
+ UDP_CT_UNREPLIED = 0,
+ UDP_CT_REPLIED = 1,
+ UDP_CT_MAX = 2,
+};
+
+enum {
+ XFRM_POLICY_IN = 0,
+ XFRM_POLICY_OUT = 1,
+ XFRM_POLICY_FWD = 2,
+ XFRM_POLICY_MASK = 3,
+ XFRM_POLICY_MAX = 3,
+};
+
+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,
+};
+
+enum {
+ TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = 1,
+ TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST = 2,
+ TCA_FLOWER_KEY_FLAGS_TUNNEL_CSUM = 4,
+ TCA_FLOWER_KEY_FLAGS_TUNNEL_DONT_FRAGMENT = 8,
+ TCA_FLOWER_KEY_FLAGS_TUNNEL_OAM = 16,
+ TCA_FLOWER_KEY_FLAGS_TUNNEL_CRIT_OPT = 32,
+ __TCA_FLOWER_KEY_FLAGS_MAX = 33,
+};
+
+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 ubuf_info_ops {
+ void (*complete)(struct sk_buff *, struct ubuf_info *, bool);
+ int (*link_skb)(struct sk_buff *, struct ubuf_info *);
+};
+
+enum skb_ext_id {
+ SKB_EXT_BRIDGE_NF = 0,
+ SKB_EXT_SEC_PATH = 1,
+ SKB_EXT_NUM = 2,
+};
+
+struct net_generic {
+ union {
+ struct {
+ unsigned int len;
+ struct callback_head rcu;
+ } s;
+ struct {
+ struct {} __empty_ptr;
+ void *ptr[0];
+ };
+ };
+};
+
+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 *);
+ void (*exit_batch_rtnl)(struct list_head *, struct list_head *);
+ unsigned int * const id;
+ const size_t size;
+};
+
+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;
+ long unsigned int flags;
+ struct callback_head rcu;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct proto_ops;
+
+struct socket {
+ socket_state state;
+ short int type;
+ long unsigned int 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 *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_accept_arg;
+
+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 *, struct proto_accept_arg *);
+ int (*getname)(struct socket *, struct sockaddr *, int);
+ __poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);
+ int (*ioctl)(struct socket *, unsigned int, long unsigned int);
+ int (*compat_ioctl)(struct socket *, unsigned int, long unsigned int);
+ int (*gettstamp)(struct socket *, void *, 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 *, int *);
+ 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);
+};
+
+struct proto_accept_arg {
+ int flags;
+ int err;
+ int is_empty;
+ bool kern;
+};
+
+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 netlink_kernel_cfg {
+ unsigned int groups;
+ unsigned int flags;
+ void (*input)(struct sk_buff *);
+ int (*bind)(struct net *, int);
+ void (*unbind)(struct net *, int);
+ void (*release)(struct sock *, long unsigned int *);
+};
+
+typedef int (*netlink_filter_fn)(struct sock *, struct sk_buff *, void *);
+
+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 xps_map_type {
+ XPS_CPUS = 0,
+ XPS_RXQS = 1,
+ XPS_MAPS_MAX = 2,
+};
+
+enum bpf_xdp_mode {
+ XDP_MODE_SKB = 0,
+ XDP_MODE_DRV = 1,
+ XDP_MODE_HW = 2,
+ __MAX_XDP_MODE = 3,
+};
+
+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];
+ long unsigned int data_state[1];
+};
+
+enum hwtstamp_source {
+ HWTSTAMP_SOURCE_UNSPEC = 0,
+ HWTSTAMP_SOURCE_NETDEV = 1,
+ HWTSTAMP_SOURCE_PHYLIB = 2,
+};
+
+struct kernel_hwtstamp_config {
+ int flags;
+ int tx_type;
+ int rx_filter;
+ struct ifreq *ifr;
+ bool copied_to_user;
+ enum hwtstamp_source source;
+};
+
+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 {
+ 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,
+};
+
+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,
+};
+
+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;
+ long unsigned int 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;
+ long unsigned int last_rand;
+ struct neigh_statistics *stats;
+ struct neigh_hash_table *nht;
+ struct pneigh_entry **phash_buckets;
+};
+
+struct neigh_statistics {
+ long unsigned int allocs;
+ long unsigned int destroys;
+ long unsigned int hash_grows;
+ long unsigned int res_failed;
+ long unsigned int lookups;
+ long unsigned int hits;
+ long unsigned int rcv_probes_mcast;
+ long unsigned int rcv_probes_ucast;
+ long unsigned int periodic_gc_runs;
+ long unsigned int forced_gc_runs;
+ long unsigned int unres_discards;
+ long unsigned int table_fulls;
+};
+
+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 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_hash_table {
+ struct neighbour **hash_buckets;
+ unsigned int hash_shift;
+ __u32 hash_rnd[4];
+ struct callback_head rcu;
+};
+
+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_BOUND_INACTIVE = 13,
+ TCP_MAX_STATES = 14,
+};
+
+struct smc_hashinfo;
+
+struct sk_psock;
+
+struct request_sock_ops;
+
+struct timewait_sock_ops;
+
+struct raw_hashinfo;
+
+struct proto {
+ void (*close)(struct sock *, long int);
+ 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 *, struct proto_accept_arg *);
+ 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 *, int *);
+ void (*keepalive)(struct sock *, int);
+ int (*compat_ioctl)(struct sock *, unsigned int, long unsigned int);
+ 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 *, short unsigned int);
+ 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 *per_cpu_fw_alloc;
+ struct percpu_counter *sockets_allocated;
+ long unsigned int *memory_pressure;
+ long int *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 *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);
+};
+
+struct audit_netlink_list {
+ __u32 portid;
+ struct net *net;
+ struct sk_buff_head q;
+};
+
+struct audit_net {
+ struct sock *sk;
+};
+
+struct auditd_connection {
+ struct pid *pid;
+ u32 portid;
+ struct net *net;
+ struct callback_head rcu;
+};
+
+struct audit_ctl_mutex {
+ struct mutex lock;
+ void *owner;
+};
+
+struct audit_buffer {
+ struct sk_buff *skb;
+ struct audit_context *ctx;
+ gfp_t gfp_mask;
+};
+
+struct audit_reply {
+ __u32 portid;
+ struct net *net;
+ struct sk_buff *skb;
+};
+
+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,
+};
+
+struct bpf_cgroup_storage_key {
+ __u64 cgroup_inode_id;
+ __u32 attach_type;
+};
+
+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,
+ BPF_TOKEN_CREATE = 36,
+ __MAX_BPF_CMD = 37,
+};
+
+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,
+ BPF_LINK_TYPE_NETKIT = 13,
+ BPF_LINK_TYPE_SOCKMAP = 14,
+ __MAX_BPF_LINK_TYPE = 15,
+};
+
+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_ANY = 0,
+ BPF_NOEXIST = 1,
+ BPF_EXIST = 2,
+ BPF_F_LOCK = 4,
+};
+
+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,
+ BPF_F_VTYPE_BTF_OBJ_FD = 32768,
+ BPF_F_TOKEN_FD = 65536,
+ BPF_F_SEGV_ON_FAULT = 131072,
+ BPF_F_NO_USER_CONV = 262144,
+};
+
+enum bpf_stats_type {
+ BPF_STATS_RUN_TIME = 0,
+};
+
+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 xdp_md {
+ __u32 data;
+ __u32 data_end;
+ __u32 data_meta;
+ __u32 ingress_ifindex;
+ __u32 rx_queue_index;
+ __u32 egress_ifindex;
+};
+
+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;
+ __u32 btf_vmlinux_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_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;
+ __u64 missed;
+ __u64 cookies;
+ } kprobe_multi;
+ struct {
+ __u64 path;
+ __u64 offsets;
+ __u64 ref_ctr_offsets;
+ __u64 cookies;
+ __u32 path_size;
+ __u32 count;
+ __u32 flags;
+ __u32 pid;
+ } uprobe_multi;
+ struct {
+ __u32 type;
+ union {
+ struct {
+ __u64 file_name;
+ __u32 name_len;
+ __u32 offset;
+ __u64 cookie;
+ } uprobe;
+ struct {
+ __u64 func_name;
+ __u32 name_len;
+ __u32 offset;
+ __u64 addr;
+ __u64 missed;
+ __u64 cookie;
+ } kprobe;
+ struct {
+ __u64 tp_name;
+ __u32 name_len;
+ __u64 cookie;
+ } tracepoint;
+ struct {
+ __u64 config;
+ __u32 type;
+ __u64 cookie;
+ } event;
+ };
+ } perf_event;
+ struct {
+ __u32 ifindex;
+ __u32 attach_type;
+ } tcx;
+ struct {
+ __u32 ifindex;
+ __u32 attach_type;
+ } netkit;
+ struct {
+ __u32 map_id;
+ __u32 attach_type;
+ } sockmap;
+ };
+};
+
+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,
+};
+
+struct bpf_spin_lock {
+ __u32 val;
+};
+
+enum tk_offsets {
+ TK_OFFS_REAL = 0,
+ TK_OFFS_BOOT = 1,
+ TK_OFFS_TAI = 2,
+ TK_OFFS_MAX = 3,
+};
+
+struct static_call_key {
+ void *func;
+};
+
+struct fd {
+ long unsigned int word;
+};
+
+typedef struct fd class_fd_t;
+
+struct fdtable {
+ unsigned int max_fds;
+ struct file **fd;
+ long unsigned int *close_on_exec;
+ long unsigned int *open_fds;
+ long unsigned int *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 *fdt;
+ struct fdtable fdtab;
+ long: 64;
+ long: 64;
+ spinlock_t file_lock;
+ unsigned int next_fd;
+ long unsigned int close_on_exec_init[1];
+ long unsigned int open_fds_init[1];
+ long unsigned int full_fds_bits_init[1];
+ struct file *fd_array[64];
+ long: 64;
+};
+
+typedef struct {} local_lock_t;
+
+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 *future_tbl;
+ struct lockdep_map dep_map;
+ long: 64;
+ struct rhash_lock_head *buckets[0];
+};
+
+struct xa_node {
+ unsigned char shift;
+ unsigned char offset;
+ unsigned char count;
+ unsigned char nr_values;
+ struct xa_node *parent;
+ struct xarray *array;
+ union {
+ struct list_head private_list;
+ struct callback_head callback_head;
+ };
+ void *slots[64];
+ union {
+ long unsigned int tags[3];
+ long unsigned int marks[3];
+ };
+};
+
+struct radix_tree_preload {
+ local_lock_t lock;
+ unsigned int nr;
+ struct xa_node *nodes;
+};
+
+struct tracepoint_func {
+ void *func;
+ void *data;
+ int prio;
+};
+
+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 *funcs;
+};
+
+struct bpf_raw_event_map {
+ struct tracepoint *tp;
+ void *bpf_func;
+ u32 num_args;
+ u32 writable_size;
+ long: 64;
+};
+
+typedef sockptr_t bpfptr_t;
+
+struct btf_struct_meta {
+ u32 btf_id;
+ struct btf_record *record;
+};
+
+struct bpf_verifier_log {
+ u64 start_pos;
+ u64 end_pos;
+ char *ubuf;
+ u32 level;
+ u32 len_total;
+ u32 len_max;
+ char kbuf[1024];
+};
+
+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_PTR_TO_ARENA = 5,
+ ARG_CONST_SIZE = 6,
+ ARG_CONST_SIZE_OR_ZERO = 7,
+ ARG_PTR_TO_CTX = 8,
+ ARG_ANYTHING = 9,
+ ARG_PTR_TO_SPIN_LOCK = 10,
+ ARG_PTR_TO_SOCK_COMMON = 11,
+ ARG_PTR_TO_SOCKET = 12,
+ ARG_PTR_TO_BTF_ID = 13,
+ ARG_PTR_TO_RINGBUF_MEM = 14,
+ ARG_CONST_ALLOC_SIZE_OR_ZERO = 15,
+ ARG_PTR_TO_BTF_ID_SOCK_COMMON = 16,
+ ARG_PTR_TO_PERCPU_BTF_ID = 17,
+ ARG_PTR_TO_FUNC = 18,
+ ARG_PTR_TO_STACK = 19,
+ ARG_PTR_TO_CONST_STR = 20,
+ ARG_PTR_TO_TIMER = 21,
+ ARG_KPTR_XCHG_DEST = 22,
+ ARG_PTR_TO_DYNPTR = 23,
+ __BPF_ARG_TYPE_MAX = 24,
+ ARG_PTR_TO_MAP_VALUE_OR_NULL = 259,
+ ARG_PTR_TO_MEM_OR_NULL = 260,
+ ARG_PTR_TO_CTX_OR_NULL = 264,
+ ARG_PTR_TO_SOCKET_OR_NULL = 268,
+ ARG_PTR_TO_STACK_OR_NULL = 275,
+ ARG_PTR_TO_BTF_ID_OR_NULL = 269,
+ ARG_PTR_TO_UNINIT_MEM = 67141636,
+ ARG_PTR_TO_FIXED_SIZE_MEM = 262148,
+ __BPF_ARG_TYPE_LIMIT = 134217727,
+};
+
+struct bpf_subprog_arg_info {
+ enum bpf_arg_type arg_type;
+ union {
+ u32 mem_size;
+ u32 btf_id;
+ };
+};
+
+struct bpf_subprog_info {
+ u32 start;
+ u32 linfo_idx;
+ u16 stack_depth;
+ u16 stack_extra;
+ s16 fastcall_stack_off;
+ bool has_tail_call: 1;
+ bool tail_call_reachable: 1;
+ bool has_ld_abs: 1;
+ bool is_cb: 1;
+ bool is_async_cb: 1;
+ bool is_exception_cb: 1;
+ bool args_cached: 1;
+ bool keep_fastcall_stack: 1;
+ u8 arg_cnt;
+ struct bpf_subprog_arg_info args[5];
+};
+
+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 backtrack_state {
+ struct bpf_verifier_env *env;
+ u32 frame;
+ u32 reg_masks[8];
+ u64 stack_masks[8];
+};
+
+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 {
+ long unsigned int raw1;
+ long unsigned int 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_verifier_ops;
+
+struct bpf_verifier_stack_elem;
+
+struct bpf_verifier_state;
+
+struct bpf_verifier_state_list;
+
+struct bpf_insn_aux_data;
+
+struct bpf_jmp_history_entry;
+
+struct bpf_verifier_env {
+ u32 insn_idx;
+ u32 prev_insn_idx;
+ struct bpf_prog *prog;
+ const struct bpf_verifier_ops *ops;
+ struct module *attach_btf_mod;
+ struct bpf_verifier_stack_elem *head;
+ int stack_size;
+ bool strict_alignment;
+ bool test_state_freq;
+ bool test_reg_invariants;
+ 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;
+ u32 hidden_subprog_cnt;
+ int exception_callback_subprog;
+ 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;
+ bool seen_exception;
+ 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[258];
+ 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;
+ struct bpf_jmp_history_entry *cur_hist_ent;
+ 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;
+ struct bpf_reg_state fake_reg[2];
+ char tmp_str_buf[320];
+ struct bpf_insn insn_buf[32];
+ struct bpf_insn epilogue_buf[32];
+};
+
+struct bpf_retval_range {
+ s32 minval;
+ s32 maxval;
+};
+
+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;
+ struct bpf_retval_range callback_ret_range;
+ bool in_callback_fn;
+ bool in_async_callback_fn;
+ bool in_exception_callback_fn;
+ u32 callback_depth;
+ int acquired_refs;
+ struct bpf_reference_state *refs;
+ struct bpf_stack_state *stack;
+ int allocated_stack;
+};
+
+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,
+ MEM_ALIGNED = 33554432,
+ MEM_WRITE = 67108864,
+ __BPF_TYPE_FLAG_MAX = 67108865,
+ __BPF_TYPE_LAST_FLAG = 67108864,
+};
+
+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 = 134217727,
+};
+
+struct bpf_func_proto {
+ u64 (*func)(u64, u64, u64, u64, u64);
+ bool gpl_only;
+ bool pkt_access;
+ bool might_sleep;
+ bool allow_fastcall;
+ 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 *);
+};
+
+enum bpf_access_type {
+ BPF_READ = 1,
+ BPF_WRITE = 2,
+};
+
+struct bpf_insn_access_aux {
+ enum bpf_reg_type reg_type;
+ bool is_ldsx;
+ union {
+ int ctx_field_size;
+ struct {
+ struct btf *btf;
+ u32 btf_id;
+ };
+ };
+ struct bpf_verifier_log *log;
+ bool is_retval;
+};
+
+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_epilogue)(struct bpf_insn *, const struct bpf_prog *, s16);
+ 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);
+};
+
+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_tramp_run_ctx {
+ struct bpf_run_ctx run_ctx;
+ u64 bpf_cookie;
+ struct bpf_run_ctx *saved_run_ctx;
+};
+
+struct bpf_attach_target_info {
+ struct btf_func_model fmodel;
+ long int tgt_addr;
+ struct module *tgt_mod;
+ const char *tgt_name;
+ const struct btf_type *tgt_type;
+};
+
+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 *);
+ __poll_t (*poll)(struct file *, struct poll_table_struct *);
+};
+
+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;
+ u64 cookie;
+};
+
+struct bpf_link_primer {
+ struct bpf_link *link;
+ struct file *file;
+ int fd;
+ u32 id;
+};
+
+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,
+};
+
+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 hw_perf_event {
+ union {
+ struct {
+ u64 config;
+ u64 last_tag;
+ long unsigned int config_base;
+ long unsigned int 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 {
+ u64 aux_config;
+ };
+ struct {
+ struct hrtimer hrtimer;
+ };
+ struct {
+ struct list_head tp_list;
+ };
+ struct {
+ u64 pwr_acc;
+ u64 ptsc;
+ };
+ struct {
+ u8 iommu_bank;
+ u8 iommu_cntr;
+ u16 padding;
+ u64 conf;
+ u64 conf1;
+ };
+ };
+ struct task_struct *target;
+ void *addr_filters;
+ long unsigned int 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_event;
+
+struct perf_sample_data;
+
+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 perf_addr_filter_range;
+
+struct perf_cgroup;
+
+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;
+ long unsigned int 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;
+ long unsigned int pending_addr;
+ struct irq_work pending_irq;
+ struct irq_work pending_disable_irq;
+ struct callback_head pending_task;
+ unsigned int pending_work;
+ struct rcuwait pending_work_wait;
+ atomic_t event_limit;
+ struct perf_addr_filters_head addr_filters;
+ struct perf_addr_filter_range *addr_filter_ranges;
+ long unsigned int 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;
+ struct bpf_prog *prog;
+ u64 bpf_cookie;
+ struct perf_cgroup *cgrp;
+ void *security;
+ struct list_head sb_list;
+ __u32 orig_type;
+};
+
+struct bpf_storage_buffer;
+
+struct bpf_cgroup_storage_map;
+
+struct bpf_cgroup_storage {
+ union {
+ struct bpf_storage_buffer *buf;
+ void *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 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 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 sk_filter {
+ refcount_t refcnt;
+ struct callback_head rcu;
+ struct bpf_prog *prog;
+};
+
+struct bpf_storage_buffer {
+ struct callback_head rcu;
+ char data[0];
+};
+
+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 rhash_lock_head {};
+
+struct bpf_active_lock {
+ void *ptr;
+ u32 id;
+};
+
+struct bpf_stack_state {
+ struct bpf_reg_state spilled_ptr;
+ u8 slot_type[8];
+};
+
+struct bpf_reference_state {
+ int id;
+ int insn_idx;
+ int callback_ref;
+};
+
+enum {
+ INSN_F_FRAMENO_MASK = 7,
+ INSN_F_SPI_MASK = 63,
+ INSN_F_SPI_SHIFT = 3,
+ INSN_F_STACK_ACCESS = 512,
+};
+
+struct bpf_jmp_history_entry {
+ u32 idx;
+ u32 prev_idx: 22;
+ u32 flags: 10;
+ u64 linked_regs;
+};
+
+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;
+ u32 active_preempt_lock;
+ bool used_as_loop_entry;
+ bool in_sleepable;
+ u32 first_insn_idx;
+ u32 last_insn_idx;
+ struct bpf_verifier_state *loop_entry;
+ struct bpf_jmp_history_entry *jmp_history;
+ u32 jmp_history_cnt;
+ u32 dfs_depth;
+ u32 callback_unroll_depth;
+ u32 may_goto_depth;
+};
+
+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 bpf_map_ptr_state {
+ struct bpf_map *map_ptr;
+ bool poison;
+ bool unpriv;
+};
+
+struct bpf_insn_aux_data {
+ union {
+ enum bpf_reg_type ptr_type;
+ struct bpf_map_ptr_state 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 needs_zext;
+ bool storage_get_func_atomic;
+ bool is_iter_next;
+ bool call_with_percpu_alloc_ptr;
+ u8 alu_state;
+ u8 fastcall_pattern: 1;
+ u8 fastcall_spills_num: 3;
+ unsigned int orig_idx;
+ bool jmp_point;
+ bool prune_point;
+ bool force_checkpoint;
+ bool calls_callback;
+};
+
+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,
+};
+
+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_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;
+};
+
+union perf_sample_weight {
+ __u64 full;
+ struct {
+ __u32 var1_dw;
+ __u16 var2_w;
+ __u16 var3_w;
+ };
+};
+
+struct perf_regs {
+ __u64 abi;
+ struct pt_regs *regs;
+};
+
+struct perf_callchain_entry {
+ __u64 nr;
+ __u64 ip[0];
+};
+
+typedef long unsigned int (*perf_copy_f)(void *, const void *, long unsigned int, long unsigned int);
+
+struct perf_raw_frag {
+ union {
+ struct perf_raw_frag *next;
+ long unsigned int 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_stack {
+ __u64 nr;
+ __u64 hw_idx;
+ struct perf_branch_entry entries[0];
+};
+
+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;
+ unsigned int scope;
+ int *pmu_disable_count;
+ struct perf_cpu_pmu_context *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 int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
+ 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;
+ unsigned int nr_freq;
+ 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;
+ long unsigned int wakeup;
+ long unsigned int size;
+ u64 aux_flags;
+ union {
+ void *addr;
+ long unsigned int head;
+ };
+ int page;
+};
+
+struct perf_addr_filter_range {
+ long unsigned int start;
+ long unsigned int size;
+};
+
+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;
+ u64 *br_stack_cntr;
+ 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;
+};
+
+struct perf_cgroup_info;
+
+struct perf_cgroup {
+ struct cgroup_subsys_state css;
+ struct perf_cgroup_info *info;
+};
+
+struct perf_cgroup_info {
+ u64 time;
+ u64 timestamp;
+ u64 timeoffset;
+ int active;
+};
+
+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_audit {
+ BPF_AUDIT_LOAD = 0,
+ BPF_AUDIT_UNLOAD = 1,
+ BPF_AUDIT_MAX = 2,
+};
+
+struct bpf_prog_kstats {
+ u64 nsecs;
+ u64 cnt;
+ u64 misses;
+};
+
+struct bpf_perf_link {
+ struct bpf_link link;
+ struct file *perf_file;
+};
+
+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 *);
+
+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,
+};
+
+enum bpf_jit_poke_reason {
+ BPF_POKE_REASON_TAIL_CALL = 0,
+};
+
+struct bpf_array_aux {
+ struct list_head poke_progs;
+ struct bpf_map *map;
+ struct mutex poke_mutex;
+ struct work_struct work;
+};
+
+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 *pptrs[0];
+ };
+ };
+};
+
+struct bpf_event_entry {
+ struct perf_event *event;
+ struct file *perf_file;
+ struct file *map_file;
+ struct callback_head rcu;
+};
+
+struct bpf_iter_meta {
+ union {
+ struct seq_file *seq;
+ };
+ u64 session_id;
+ u64 seq_num;
+};
+
+struct bpf_iter__bpf_map_elem {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct bpf_map *map;
+ };
+ union {
+ void *key;
+ };
+ union {
+ void *value;
+ };
+};
+
+struct bpf_iter_seq_array_map_info {
+ struct bpf_map *map;
+ void *percpu_value_buf;
+ u32 index;
+};
+
+struct prog_poke_elem {
+ struct list_head list;
+ struct bpf_prog_aux *aux;
+};
+
+typedef void (*swap_r_func_t)(void *, void *, int, const void *);
+
+typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
+
+struct btf_enum {
+ __u32 name_off;
+ __s32 val;
+};
+
+struct btf_array {
+ __u32 type;
+ __u32 index_type;
+ __u32 nelems;
+};
+
+struct btf_member {
+ __u32 name_off;
+ __u32 type;
+ __u32 offset;
+};
+
+struct btf_param {
+ __u32 name_off;
+ __u32 type;
+};
+
+enum {
+ BTF_VAR_STATIC = 0,
+ BTF_VAR_GLOBAL_ALLOCATED = 1,
+ BTF_VAR_GLOBAL_EXTERN = 2,
+};
+
+enum btf_func_linkage {
+ BTF_FUNC_STATIC = 0,
+ BTF_FUNC_GLOBAL = 1,
+ BTF_FUNC_EXTERN = 2,
+};
+
+struct btf_var {
+ __u32 linkage;
+};
+
+struct btf_var_secinfo {
+ __u32 type;
+ __u32 offset;
+ __u32 size;
+};
+
+struct btf_decl_tag {
+ __s32 component_idx;
+};
+
+struct btf_enum64 {
+ __u32 name_off;
+ __u32 val_lo32;
+ __u32 val_hi32;
+};
+
+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 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 __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 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 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 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_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_cgroup_dev_ctx {
+ __u32 access_type;
+ __u32 major;
+ __u32 minor;
+};
+
+struct bpf_sysctl {
+ __u32 write;
+ __u32 file_pos;
+};
+
+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_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;
+};
+
+enum {
+ BTF_F_COMPACT = 1,
+ BTF_F_NONAME = 2,
+ BTF_F_PTR_RAW = 4,
+ BTF_F_ZERO = 8,
+};
+
+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,
+};
+
+struct bpf_core_relo {
+ __u32 insn_off;
+ __u32 type_id;
+ __u32 access_str_off;
+ enum bpf_core_relo_kind kind;
+};
+
+struct hlist_nulls_head {
+ struct hlist_nulls_node *first;
+};
+
+struct btf_id_set {
+ u32 cnt;
+ u32 ids[0];
+};
+
+struct btf_id_set8 {
+ u32 cnt;
+ u32 flags;
+ struct {
+ u32 id;
+ u32 flags;
+ } pairs[0];
+};
+
+typedef int (*btf_kfunc_filter_t)(const struct bpf_prog *, u32);
+
+struct btf_kfunc_id_set {
+ struct module *owner;
+ struct btf_id_set8 *set;
+ btf_kfunc_filter_t filter;
+};
+
+struct btf_id_dtor_kfunc {
+ u32 btf_id;
+ u32 kfunc_btf_id;
+};
+
+struct btf_struct_metas {
+ u32 cnt;
+ struct btf_struct_meta types[0];
+};
+
+enum {
+ BTF_FIELDS_MAX = 11,
+};
+
+enum bpf_cgroup_storage_type {
+ BPF_CGROUP_STORAGE_SHARED = 0,
+ BPF_CGROUP_STORAGE_PERCPU = 1,
+ __BPF_CGROUP_STORAGE_MAX = 2,
+};
+
+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 *, struct bpf_link *);
+ void (*unreg)(void *, struct bpf_link *);
+ int (*update)(void *, void *, struct bpf_link *);
+ int (*validate)(void *);
+ void *cfi_stubs;
+ struct module *owner;
+ const char *name;
+ struct btf_func_model func_models[64];
+};
+
+struct bpf_struct_ops_arg_info {
+ struct bpf_ctx_arg_aux *info;
+ u32 cnt;
+};
+
+struct bpf_struct_ops_desc {
+ struct bpf_struct_ops *st_ops;
+ const struct btf_type *type;
+ const struct btf_type *value_type;
+ u32 type_id;
+ u32 value_id;
+ struct bpf_struct_ops_arg_info *arg_info;
+};
+
+struct bpf_core_ctx {
+ struct bpf_verifier_log *log;
+ const struct btf *btf;
+};
+
+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 scatterlist {
+ long unsigned int page_link;
+ unsigned int offset;
+ unsigned int length;
+ dma_addr_t dma_address;
+};
+
+struct bpf_flow_dissector {
+ struct bpf_flow_keys *flow_keys;
+ const struct sk_buff *skb;
+ const void *data;
+ const void *data_end;
+};
+
+struct icmpv6_mib_device {
+ atomic_long_t mibs[7];
+};
+
+struct icmpv6msg_mib_device {
+ atomic_long_t mibs[512];
+};
+
+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 ip_ra_chain {
+ struct ip_ra_chain *next;
+ struct sock *sk;
+ union {
+ void (*destructor)(struct sock *);
+ struct sock *saved_sk;
+ };
+ struct callback_head rcu;
+};
+
+struct inet_peer_base {
+ struct rb_root rb_root;
+ seqlock_t lock;
+ int total;
+};
+
+struct tcp_fastopen_context {
+ siphash_key_t key[2];
+ int num;
+ struct callback_head rcu;
+};
+
+struct ipv6_stable_secret {
+ bool initialized;
+ struct in6_addr secret;
+};
+
+struct ipv6_devconf {
+ __u8 __cacheline_group_begin__ipv6_devconf_read_txrx[0];
+ __s32 disable_ipv6;
+ __s32 hop_limit;
+ __s32 mtu6;
+ __s32 forwarding;
+ __s32 disable_policy;
+ __s32 proxy_ndp;
+ __u8 __cacheline_group_end__ipv6_devconf_read_txrx[0];
+ __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_min_advance;
+ __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_source_route;
+ __s32 accept_ra_from_local;
+ __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 ndisc_tclass;
+ __s32 rpl_seg_enabled;
+ __u32 ioam6_id;
+ __u32 ioam6_id_wide;
+ __u8 ioam6_enabled;
+ __u8 ndisc_evict_nocarrier;
+ __u8 ra_honor_pio_life;
+ __u8 ra_honor_pio_pflag;
+ struct ctl_table_header *sysctl_header;
+};
+
+struct ipv6_devstat {
+ struct proc_dir_entry *proc_dir_entry;
+ struct ipstats_mib *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 *mc_list;
+ struct ifmcaddr6 *mc_tomb;
+ unsigned char mc_qrv;
+ unsigned char mc_gq_running;
+ unsigned char mc_ifc_count;
+ unsigned char mc_dad_count;
+ long unsigned int mc_v1_seen;
+ long unsigned int mc_qi;
+ long unsigned int mc_qri;
+ long unsigned int 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;
+ long unsigned int tstamp;
+ struct callback_head rcu;
+ unsigned int ra_mtu;
+};
+
+struct __una_u32 {
+ u32 x;
+};
+
+struct bpf_sock_addr_kern {
+ struct sock *sk;
+ struct sockaddr *uaddr;
+ u64 tmp_reg;
+ void *t_ctx;
+ u32 uaddrlen;
+};
+
+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 bpf_sysctl_kern {
+ struct ctl_table_header *head;
+ const 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_kern {
+ struct sock *sk;
+ u8 *optval;
+ u8 *optval_end;
+ s32 level;
+ s32 optname;
+ s32 optlen;
+ struct task_struct *current_task;
+ u64 tmp_reg;
+};
+
+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 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 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 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 *prog;
+ struct sock *socks[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 bpf_link *msg_parser_link;
+ struct bpf_link *stream_parser_link;
+ struct bpf_link *stream_verdict_link;
+ struct bpf_link *skb_verdict_link;
+};
+
+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;
+ long unsigned int 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 int);
+ 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;
+};
+
+enum sk_rst_reason {
+ SK_RST_REASON_NOT_SPECIFIED = 0,
+ SK_RST_REASON_NO_SOCKET = 1,
+ SK_RST_REASON_TCP_INVALID_ACK_SEQUENCE = 2,
+ SK_RST_REASON_TCP_RFC7323_PAWS = 3,
+ SK_RST_REASON_TCP_TOO_OLD_ACK = 4,
+ SK_RST_REASON_TCP_ACK_UNSENT_DATA = 5,
+ SK_RST_REASON_TCP_FLAGS = 6,
+ SK_RST_REASON_TCP_OLD_ACK = 7,
+ SK_RST_REASON_TCP_ABORT_ON_DATA = 8,
+ SK_RST_REASON_TCP_TIMEWAIT_SOCKET = 9,
+ SK_RST_REASON_INVALID_SYN = 10,
+ SK_RST_REASON_TCP_ABORT_ON_CLOSE = 11,
+ SK_RST_REASON_TCP_ABORT_ON_LINGER = 12,
+ SK_RST_REASON_TCP_ABORT_ON_MEMORY = 13,
+ SK_RST_REASON_TCP_STATE = 14,
+ SK_RST_REASON_TCP_KEEPALIVE_TIMEOUT = 15,
+ SK_RST_REASON_TCP_DISCONNECT_WITH_DATA = 16,
+ SK_RST_REASON_MPTCP_RST_EUNSPEC = 17,
+ SK_RST_REASON_MPTCP_RST_EMPTCP = 18,
+ SK_RST_REASON_MPTCP_RST_ERESOURCE = 19,
+ SK_RST_REASON_MPTCP_RST_EPROHIBIT = 20,
+ SK_RST_REASON_MPTCP_RST_EWQ2BIG = 21,
+ SK_RST_REASON_MPTCP_RST_EBADPERF = 22,
+ SK_RST_REASON_MPTCP_RST_EMIDDLEBOX = 23,
+ SK_RST_REASON_ERROR = 24,
+ SK_RST_REASON_MAX = 25,
+};
+
+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 *, enum sk_rst_reason);
+ void (*destructor)(struct request_sock *);
+ void (*syn_ack_timeout)(const struct request_sock *);
+};
+
+struct timewait_sock_ops {
+ struct kmem_cache *twsk_slab;
+ char *twsk_slab_name;
+ unsigned int twsk_obj_size;
+ void (*twsk_destructor)(struct sock *);
+};
+
+struct saved_syn {
+ u32 mac_hdrlen;
+ u32 network_hdrlen;
+ u32 tcp_hdrlen;
+ u8 data[0];
+};
+
+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,
+ TCP_ACK_DEFERRED = 6,
+};
+
+struct ip6_sf_list {
+ struct ip6_sf_list *sf_next;
+ struct in6_addr sf_addr;
+ long unsigned int sf_count[2];
+ unsigned char sf_gsresp;
+ unsigned char sf_oldin;
+ unsigned char sf_crcount;
+ struct callback_head rcu;
+};
+
+struct ifmcaddr6 {
+ struct in6_addr mca_addr;
+ struct inet6_dev *idev;
+ struct ifmcaddr6 *next;
+ struct ip6_sf_list *mca_sources;
+ struct ip6_sf_list *mca_tomb;
+ unsigned int mca_sfmode;
+ unsigned char mca_crcount;
+ long unsigned int mca_sfcount[2];
+ struct delayed_work mca_work;
+ unsigned int mca_flags;
+ int mca_users;
+ refcount_t mca_refcnt;
+ long unsigned int mca_cstamp;
+ long unsigned int mca_tstamp;
+ 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;
+ long unsigned int aca_cstamp;
+ long unsigned int aca_tstamp;
+ struct callback_head rcu;
+};
+
+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,
+};
+
+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_useropts;
+ struct nd_opt_hdr *nd_useropts_end;
+};
+
+struct prefix_info {
+ __u8 type;
+ __u8 length;
+ __u8 prefix_len;
+ union {
+ __u8 flags;
+ struct {
+ __u8 reserved: 4;
+ __u8 preferpd: 1;
+ __u8 routeraddr: 1;
+ __u8 autoconf: 1;
+ __u8 onlink: 1;
+ };
+ };
+ __be32 valid;
+ __be32 prefered;
+ __be32 reserved2;
+ struct in6_addr prefix;
+};
+
+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 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 int interval_us;
+ u32 snd_interval_us;
+ u32 rcv_interval_us;
+ long int 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 sk_msg_sg {
+ u32 start;
+ u32 curr;
+ u32 end;
+ u32 size;
+ u32 copybreak;
+ long unsigned int 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 nf_hook_state;
+
+struct bpf_nf_ctx {
+ const struct nf_hook_state *state;
+ struct sk_buff *skb;
+};
+
+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 bpf_core_cand {
+ const struct btf *btf;
+ __u32 id;
+};
+
+struct bpf_core_cand_list {
+ struct bpf_core_cand *cands;
+ int len;
+};
+
+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;
+};
+
+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 = 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_KPROBE = 13,
+ BTF_KFUNC_HOOK_MAX = 14,
+};
+
+enum {
+ BTF_KFUNC_SET_MAX_CNT = 256,
+ BTF_DTOR_KFUNC_MAX_CNT = 256,
+ BTF_KFUNC_FILTER_MAX_CNT = 16,
+};
+
+struct btf_kfunc_hook_filter {
+ btf_kfunc_filter_t filters[16];
+ u32 nr_filters;
+};
+
+struct btf_kfunc_set_tab {
+ struct btf_id_set8 *sets[14];
+ struct btf_kfunc_hook_filter hook_filters[14];
+};
+
+struct btf_id_dtor_kfunc_tab {
+ u32 cnt;
+ struct btf_id_dtor_kfunc dtors[0];
+};
+
+struct btf_struct_ops_tab {
+ u32 cnt;
+ u32 capacity;
+ struct bpf_struct_ops_desc ops[0];
+};
+
+enum verifier_phase {
+ CHECK_META = 0,
+ CHECK_TYPE = 1,
+};
+
+struct resolve_vertex {
+ const struct btf_type *t;
+ u32 type_id;
+ u16 next_member;
+};
+
+enum visit_state {
+ NOT_VISITED = 0,
+ VISITED = 1,
+ RESOLVED = 2,
+};
+
+enum resolve_mode {
+ RESOLVE_TBD = 0,
+ RESOLVE_PTR = 1,
+ RESOLVE_STRUCT_OR_ARRAY = 2,
+};
+
+struct btf_sec_info {
+ u32 off;
+ u32 len;
+};
+
+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 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 *);
+};
+
+enum {
+ BTF_FIELD_IGNORE = 0,
+ BTF_FIELD_FOUND = 1,
+};
+
+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;
+ };
+};
+
+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;
+ 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;
+ 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_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;
+};
+
+enum {
+ __ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,
+ __ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,
+ __ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,
+ __ctx_convertBPF_PROG_TYPE_XDP = 3,
+ __ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,
+ __ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,
+ __ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,
+ __ctx_convertBPF_PROG_TYPE_LWT_IN = 7,
+ __ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,
+ __ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,
+ __ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,
+ __ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,
+ __ctx_convertBPF_PROG_TYPE_SK_SKB = 12,
+ __ctx_convertBPF_PROG_TYPE_SK_MSG = 13,
+ __ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,
+ __ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 15,
+ __ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 16,
+ __ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 17,
+ __ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 18,
+ __ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 19,
+ __ctx_convertBPF_PROG_TYPE_SYSCALL = 20,
+ __ctx_convertBPF_PROG_TYPE_NETFILTER = 21,
+ __ctx_convert_unused = 22,
+};
+
+enum bpf_struct_walk_result {
+ WALK_SCALAR = 0,
+ WALK_PTR = 1,
+ WALK_STRUCT = 2,
+};
+
+struct bpf_cand_cache {
+ const char *name;
+ u32 name_len;
+ u16 kind;
+ u16 cnt;
+ struct {
+ const struct btf *btf;
+ u32 id;
+ } cands[0];
+};
+
+enum btf_arg_tag {
+ ARG_TAG_CTX = 1,
+ ARG_TAG_NONNULL = 2,
+ ARG_TAG_TRUSTED = 4,
+ ARG_TAG_NULLABLE = 8,
+ ARG_TAG_ARENA = 16,
+};
+
+struct btf_show_snprintf {
+ struct btf_show show;
+ int len_left;
+ int len;
+};
+
+enum {
+ BTF_MODULE_F_LIVE = 1,
+};
+
+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);
+
+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 {
+ 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_SMC = 256,
+ IPPROTO_MPTCP = 262,
+ IPPROTO_MAX = 263,
+};
+
+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 *ptrs[0];
+};
+
+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;
+};
+
+enum wq_flags {
+ WQ_BH = 1,
+ 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_BH_ALLOWS = 17,
+};
+
+struct parallel_data;
+
+struct padata_priv {
+ struct list_head list;
+ struct parallel_data *pd;
+ int cb_cpu;
+ unsigned int seq_nr;
+ int info;
+ void (*parallel)(struct padata_priv *);
+ void (*serial)(struct padata_priv *);
+};
+
+struct padata_cpumask {
+ cpumask_var_t pcpu;
+ cpumask_var_t cbcpu;
+};
+
+struct padata_shell;
+
+struct padata_list;
+
+struct padata_serial_queue;
+
+struct parallel_data {
+ struct padata_shell *ps;
+ struct padata_list *reorder_list;
+ struct padata_serial_queue *squeue;
+ refcount_t refcnt;
+ unsigned int seq_nr;
+ unsigned int processed;
+ int cpu;
+ struct padata_cpumask cpumask;
+ struct work_struct reorder_work;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ spinlock_t lock;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct padata_list {
+ struct list_head list;
+ spinlock_t lock;
+};
+
+struct padata_serial_queue {
+ struct padata_list serial;
+ struct work_struct work;
+ struct parallel_data *pd;
+};
+
+struct padata_instance;
+
+struct padata_shell {
+ struct padata_instance *pinst;
+ struct parallel_data *pd;
+ struct parallel_data *opd;
+ struct list_head list;
+};
+
+struct padata_instance {
+ struct hlist_node cpu_online_node;
+ struct hlist_node cpu_dead_node;
+ struct workqueue_struct *parallel_wq;
+ struct workqueue_struct *serial_wq;
+ struct list_head pslist;
+ struct padata_cpumask cpumask;
+ struct kobject kobj;
+ struct mutex lock;
+ u8 flags;
+};
+
+struct padata_mt_job {
+ void (*thread_fn)(long unsigned int, long unsigned int, void *);
+ void *fn_arg;
+ long unsigned int start;
+ long unsigned int size;
+ long unsigned int align;
+ long unsigned int min_chunk;
+ int max_threads;
+ bool numa_aware;
+};
+
+struct padata_work {
+ struct work_struct pw_work;
+ struct list_head pw_list;
+ void *pw_data;
+};
+
+struct padata_mt_job_state {
+ spinlock_t lock;
+ struct completion completion;
+ struct padata_mt_job *job;
+ int nworks;
+ int nworks_fini;
+ long unsigned int chunk_size;
+};
+
+struct padata_sysfs_entry {
+ struct attribute attr;
+ ssize_t (*show)(struct padata_instance *, struct attribute *, char *);
+ ssize_t (*store)(struct padata_instance *, struct attribute *, const char *, size_t);
+};
+
+struct static_key_true {
+ struct static_key key;
+};
+
+struct compact_control;
+
+struct capture_control {
+ struct compact_control *cc;
+ struct page *page;
+};
+
+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 anon_vma {
+ struct anon_vma *root;
+ struct rw_semaphore rwsem;
+ atomic_t refcount;
+ long unsigned int num_children;
+ long unsigned int num_active_vmas;
+ struct anon_vma *parent;
+ struct rb_root_cached rb_root;
+};
+
+enum pagetype {
+ PGTY_buddy = 240,
+ PGTY_offline = 241,
+ PGTY_table = 242,
+ PGTY_guard = 243,
+ PGTY_hugetlb = 244,
+ PGTY_slab = 245,
+ PGTY_zsmalloc = 246,
+ PGTY_unaccepted = 247,
+ PGTY_mapcount_underflow = 255,
+};
+
+typedef struct pglist_data pg_data_t;
+
+typedef unsigned int xa_mark_t;
+
+typedef void (*xa_update_node_t)(struct xa_node *);
+
+struct xa_state {
+ struct xarray *xa;
+ long unsigned int 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;
+};
+
+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_DAMON = 9,
+ MR_TYPES = 10,
+};
+
+enum napot_cont_order {
+ NAPOT_CONT64KB_ORDER = 4,
+ NAPOT_ORDER_MAX = 5,
+};
+
+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,
+};
+
+typedef int __kernel_rwf_t;
+
+enum positive_aop_returns {
+ AOP_WRITEPAGE_ACTIVATE = 524288,
+ AOP_TRUNCATED_PAGE = 524289,
+};
+
+struct vm_event_state {
+ long unsigned int event[73];
+};
+
+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_RELEASE_ALWAYS = 6,
+ AS_STABLE_WRITES = 7,
+ AS_INACCESSIBLE = 8,
+ AS_FOLIO_ORDER_BITS = 5,
+ AS_FOLIO_ORDER_MIN = 16,
+ AS_FOLIO_ORDER_MAX = 21,
+};
+
+typedef int filler_t(struct file *, struct folio *);
+
+typedef unsigned int fgf_t;
+
+struct wait_page_key {
+ struct folio *folio;
+ int bit_nr;
+ int page_match;
+};
+
+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 pipe_buf_operations;
+
+struct pipe_buffer {
+ struct page *page;
+ unsigned int offset;
+ unsigned int len;
+ const struct pipe_buf_operations *ops;
+ unsigned int flags;
+ long unsigned int 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 compact_control {
+ struct list_head freepages[11];
+ struct list_head migratepages;
+ unsigned int nr_freepages;
+ unsigned int nr_migratepages;
+ long unsigned int free_pfn;
+ long unsigned int migrate_pfn;
+ long unsigned int fast_start_pfn;
+ struct zone *zone;
+ long unsigned int total_migrate_scanned;
+ long unsigned int total_free_scanned;
+ short unsigned int fast_search_fail;
+ short int 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;
+};
+
+enum behavior {
+ EXCLUSIVE = 0,
+ SHARED = 1,
+ DROP = 2,
+};
+
+struct mem_section_usage {
+ struct callback_head rcu;
+ long unsigned int subsection_map[1];
+ long unsigned int pageblock_flags[0];
+};
+
+struct mem_section {
+ long unsigned int section_mem_map;
+ struct mem_section_usage *usage;
+};
+
+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 struct kmem_cache *kmem_buckets[14];
+
+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 *cpu_slab;
+ slab_flags_t flags;
+ long unsigned int 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;
+ struct kmem_cache_node *node[1];
+};
+
+struct slab {
+ long unsigned int __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 {
+ long unsigned int counters;
+ struct {
+ unsigned int inuse: 16;
+ unsigned int objects: 15;
+ unsigned int frozen: 1;
+ };
+ };
+ };
+ };
+ };
+ struct callback_head callback_head;
+ };
+ unsigned int __page_type;
+ atomic_t __page_refcount;
+ long unsigned int obj_exts;
+};
+
+enum slab_state {
+ DOWN = 0,
+ PARTIAL = 1,
+ UP = 2,
+ FULL = 3,
+};
+
+struct kmalloc_info_struct {
+ const char *name[3];
+ unsigned int size;
+};
+
+struct slabinfo {
+ long unsigned int active_objs;
+ long unsigned int num_objs;
+ long unsigned int active_slabs;
+ long unsigned int num_slabs;
+ long unsigned int shared_avail;
+ unsigned int limit;
+ unsigned int batchcount;
+ unsigned int shared;
+ unsigned int objects_per_slab;
+ unsigned int cache_order;
+};
+
+struct kmem_obj_info {
+ void *kp_ptr;
+ struct slab *kp_slab;
+ void *kp_objp;
+ long unsigned int kp_data_offset;
+ struct kmem_cache *kp_slab_cache;
+ void *kp_ret;
+ void *kp_stack[16];
+ void *kp_free_stack[16];
+};
+
+typedef struct {
+ long unsigned int p4d;
+} p4d_t;
+
+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 *, long unsigned int, long unsigned int, struct mm_walk *);
+ int (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *);
+ int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);
+ int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);
+ int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);
+ int (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *);
+ int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);
+ int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);
+ int (*pre_vma)(long unsigned int, long unsigned int, 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;
+};
+
+struct vmap_area {
+ long unsigned int va_start;
+ long unsigned int va_end;
+ struct rb_node rb_node;
+ struct list_head list;
+ union {
+ long unsigned int subtree_max_size;
+ struct vm_struct *vm;
+ };
+ long unsigned int flags;
+};
+
+typedef unsigned int kasan_vmalloc_flags_t;
+
+typedef unsigned int pgtbl_mod_mask;
+
+enum memcg_stat_item {
+ MEMCG_SWAP = 45,
+ MEMCG_SOCK = 46,
+ MEMCG_PERCPU_B = 47,
+ MEMCG_VMALLOC = 48,
+ MEMCG_KMEM = 49,
+ MEMCG_ZSWAP_B = 50,
+ MEMCG_ZSWAPPED = 51,
+ MEMCG_NR_STAT = 52,
+};
+
+enum objext_flags {
+ OBJEXTS_ALLOC_FAIL = 4,
+ __NR_OBJEXTS_FLAGS = 8,
+};
+
+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 *);
+};
+
+struct vfree_deferred {
+ struct llist_head list;
+ struct work_struct wq;
+};
+
+struct rb_list {
+ struct rb_root root;
+ struct list_head head;
+ spinlock_t lock;
+};
+
+struct vmap_pool {
+ struct list_head head;
+ long unsigned int len;
+};
+
+struct vmap_node {
+ struct vmap_pool pool[256];
+ spinlock_t pool_lock;
+ bool skip_populate;
+ struct rb_list busy;
+ struct rb_list lazy;
+ struct list_head purge_list;
+ struct work_struct purge_work;
+ long unsigned int nr_purged;
+};
+
+enum fit_type {
+ NOTHING_FIT = 0,
+ FL_FIT_TYPE = 1,
+ LE_FIT_TYPE = 2,
+ RE_FIT_TYPE = 3,
+ NE_FIT_TYPE = 4,
+};
+
+struct vmap_block_queue {
+ spinlock_t lock;
+ struct list_head free;
+ struct xarray vmap_blocks;
+};
+
+struct vmap_block {
+ spinlock_t lock;
+ struct vmap_area *va;
+ long unsigned int free;
+ long unsigned int dirty;
+ long unsigned int used_map[16];
+ long unsigned int dirty_min;
+ long unsigned int dirty_max;
+ struct list_head free_list;
+ struct callback_head callback_head;
+ struct list_head purge;
+ unsigned int cpu;
+};
+
+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 request;
+
+struct blk_plug {
+ struct request *mq_list;
+ struct request *cached_rq;
+ u64 cur_ktime;
+ short unsigned int nr_ios;
+ short unsigned int rq_count;
+ bool multiple_queues;
+ bool has_elevator;
+ struct list_head cb_list;
+};
+
+typedef unsigned int blk_mode_t;
+
+struct block_device_operations;
+
+struct timer_rand_state;
+
+struct disk_events;
+
+struct cdrom_device_info;
+
+struct badblocks;
+
+struct blk_independent_access_ranges;
+
+struct gendisk {
+ int major;
+ int first_minor;
+ int minors;
+ char disk_name[32];
+ short unsigned int events;
+ short unsigned int 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;
+ long unsigned int 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;
+ struct cdrom_device_info *cdi;
+ 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;
+};
+
+struct vma_iterator {
+ struct ma_state mas;
+};
+
+typedef unsigned int blk_features_t;
+
+typedef unsigned int blk_flags_t;
+
+enum blk_integrity_checksum {
+ BLK_INTEGRITY_CSUM_NONE = 0,
+ BLK_INTEGRITY_CSUM_IP = 1,
+ BLK_INTEGRITY_CSUM_CRC = 2,
+ BLK_INTEGRITY_CSUM_CRC64 = 3,
+} __attribute__((mode(byte)));
+
+struct blk_integrity {
+ unsigned char flags;
+ enum blk_integrity_checksum csum_type;
+ unsigned char tuple_size;
+ unsigned char pi_offset;
+ unsigned char interval_exp;
+ unsigned char tag_size;
+};
+
+struct queue_limits {
+ blk_features_t features;
+ blk_flags_t flags;
+ long unsigned int seg_boundary_mask;
+ long unsigned int 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_user_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 int atomic_write_hw_max;
+ unsigned int atomic_write_max_sectors;
+ unsigned int atomic_write_hw_boundary;
+ unsigned int atomic_write_boundary_sectors;
+ unsigned int atomic_write_hw_unit_min;
+ unsigned int atomic_write_unit_min;
+ unsigned int atomic_write_hw_unit_max;
+ unsigned int atomic_write_unit_max;
+ short unsigned int max_segments;
+ short unsigned int max_integrity_segments;
+ short unsigned int max_discard_segments;
+ unsigned int max_open_zones;
+ unsigned int max_active_zones;
+ unsigned int dma_alignment;
+ unsigned int dma_pad_mask;
+ struct blk_integrity integrity;
+};
+
+struct elevator_queue;
+
+struct blk_mq_ops;
+
+struct blk_mq_ctx;
+
+struct blk_queue_stats;
+
+struct rq_qos;
+
+struct blk_mq_tags;
+
+struct blk_flush_queue;
+
+struct throtl_data;
+
+struct blk_mq_tag_set;
+
+struct request_queue {
+ void *queuedata;
+ struct elevator_queue *elevator;
+ const struct blk_mq_ops *mq_ops;
+ struct blk_mq_ctx *queue_ctx;
+ long unsigned int queue_flags;
+ unsigned int rq_timeout;
+ unsigned int queue_depth;
+ refcount_t refs;
+ unsigned int nr_hw_queues;
+ struct xarray hctx_table;
+ struct percpu_ref q_usage_counter;
+ struct request *last_merge;
+ spinlock_t queue_lock;
+ int quiesce_depth;
+ struct gendisk *disk;
+ struct kobject *mq_kobj;
+ struct queue_limits limits;
+ struct device *dev;
+ enum rpm_status rpm_status;
+ atomic_t pm_only;
+ struct blk_queue_stats *stats;
+ struct rq_qos *rq_qos;
+ struct mutex rq_qos_mutex;
+ int id;
+ long unsigned int nr_requests;
+ 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;
+ long unsigned int blkcg_pols[1];
+ struct blkcg_gq *root_blkg;
+ struct list_head blkg_list;
+ struct mutex blkcg_mutex;
+ int node;
+ spinlock_t requeue_lock;
+ struct list_head requeue_list;
+ struct delayed_work requeue_work;
+ struct blk_flush_queue *fq;
+ struct list_head flush_list;
+ struct mutex sysfs_lock;
+ struct mutex sysfs_dir_lock;
+ struct mutex limits_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;
+ 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;
+};
+
+enum {
+ PERCPU_REF_INIT_ATOMIC = 1,
+ PERCPU_REF_INIT_DEAD = 2,
+ PERCPU_REF_ALLOW_REINIT = 4,
+};
+
+struct io_comp_batch {
+ struct request *req_list;
+ bool need_ts;
+ void (*complete)(struct io_comp_batch *);
+};
+
+struct partition_meta_info {
+ char uuid[37];
+ u8 volname[64];
+};
+
+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];
+};
+
+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 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, long unsigned int);
+ int (*compat_ioctl)(struct block_device *, blk_mode_t, unsigned int, long unsigned int);
+ 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 *, long unsigned int);
+ 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 *);
+};
+
+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];
+};
+
+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 *);
+};
+
+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 *);
+};
+
+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_extent {
+ struct rb_node rb_node;
+ long unsigned int start_page;
+ long unsigned int nr_pages;
+ sector_t start_block;
+};
+
+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,
+};
+
+typedef long unsigned int pte_marker;
+
+typedef int rmap_t;
+
+struct ptdesc {
+ long unsigned int __page_flags;
+ union {
+ struct callback_head pt_rcu_head;
+ struct list_head pt_list;
+ struct {
+ long unsigned int _pt_pad_1;
+ pgtable_t pmd_huge_pte;
+ };
+ };
+ long unsigned int __page_mapping;
+ union {
+ long unsigned int pt_index;
+ struct mm_struct *pt_mm;
+ atomic_t pt_frag_refcount;
+ };
+ union {
+ long unsigned int _pt_pad_2;
+ spinlock_t *ptl;
+ };
+ unsigned int __page_type;
+ atomic_t __page_refcount;
+ long unsigned int pt_memcg_data;
+};
+
+typedef unsigned int isolate_mode_t;
+
+struct buffer_head;
+
+typedef void bh_end_io_t(struct buffer_head *, int);
+
+struct buffer_head {
+ long unsigned int 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;
+};
+
+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_SHMEM_ALLOC = 5,
+ MTHP_STAT_SHMEM_FALLBACK = 6,
+ MTHP_STAT_SHMEM_FALLBACK_CHARGE = 7,
+ MTHP_STAT_SPLIT = 8,
+ MTHP_STAT_SPLIT_FAILED = 9,
+ MTHP_STAT_SPLIT_DEFERRED = 10,
+ MTHP_STAT_NR_ANON = 11,
+ MTHP_STAT_NR_ANON_PARTIALLY_MAPPED = 12,
+ __MTHP_STAT_COUNT = 13,
+};
+
+struct hstate;
+
+struct hugepage_subpool {
+ spinlock_t lock;
+ long int count;
+ long int max_hpages;
+ long int used_hpages;
+ struct hstate *hstate;
+ long int min_hpages;
+ long int rsv_hpages;
+};
+
+struct hstate {
+ struct mutex resize_lock;
+ struct lock_class_key resize_key;
+ int next_nid_to_alloc;
+ int next_nid_to_free;
+ unsigned int order;
+ unsigned int demote_order;
+ long unsigned int mask;
+ long unsigned int max_huge_pages;
+ long unsigned int nr_huge_pages;
+ long unsigned int free_huge_pages;
+ long unsigned int resv_huge_pages;
+ long unsigned int surplus_huge_pages;
+ long unsigned int nr_overcommit_huge_pages;
+ struct list_head hugepage_activelist;
+ struct list_head hugepage_freelists[1];
+ unsigned int max_huge_pages_node[1];
+ unsigned int nr_huge_pages_node[1];
+ unsigned int free_huge_pages_node[1];
+ unsigned int surplus_huge_pages_node[1];
+ char name[32];
+};
+
+struct hugetlbfs_sb_info {
+ long int max_inodes;
+ long int free_inodes;
+ spinlock_t stat_lock;
+ struct hstate *hstate;
+ struct hugepage_subpool *spool;
+ kuid_t uid;
+ kgid_t gid;
+ umode_t mode;
+};
+
+typedef struct folio *new_folio_t(struct folio *, long unsigned int);
+
+typedef void free_folio_t(struct folio *, long unsigned int);
+
+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 *);
+};
+
+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 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,
+};
+
+struct page_vma_mapped_walk {
+ long unsigned int pfn;
+ long unsigned int nr_pages;
+ long unsigned int pgoff;
+ struct vm_area_struct *vma;
+ long unsigned int address;
+ pmd_t *pmd;
+ pte_t *pte;
+ spinlock_t *ptl;
+ unsigned int flags;
+};
+
+enum rmp_flags {
+ RMP_LOCKED = 1,
+ RMP_USE_SHARED_ZEROPAGE = 2,
+};
+
+struct rmap_walk_control {
+ void *arg;
+ bool try_lock;
+ bool contended;
+ bool (*rmap_one)(struct folio *, struct vm_area_struct *, long unsigned int, 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 migration_target_control {
+ int nid;
+ nodemask_t *nmask;
+ gfp_t gfp_mask;
+ enum migrate_reason reason;
+};
+
+struct rmap_walk_arg {
+ struct folio *folio;
+ bool map_unused_to_zeropage;
+};
+
+enum {
+ PAGE_WAS_MAPPED = 1,
+ PAGE_WAS_MLOCKED = 2,
+ PAGE_OLD_STATES = 3,
+};
+
+struct migrate_pages_stats {
+ int nr_succeeded;
+ int nr_failed_pages;
+ int nr_thp_succeeded;
+ int nr_thp_failed;
+ int nr_thp_split;
+ int nr_split;
+};
+
+enum execmem_type {
+ EXECMEM_DEFAULT = 0,
+ EXECMEM_MODULE_TEXT = 0,
+ EXECMEM_KPROBES = 1,
+ EXECMEM_FTRACE = 2,
+ EXECMEM_BPF = 3,
+ EXECMEM_MODULE_DATA = 4,
+ EXECMEM_TYPE_MAX = 5,
+};
+
+enum execmem_range_flags {
+ EXECMEM_KASAN_SHADOW = 1,
+};
+
+struct execmem_range {
+ long unsigned int start;
+ long unsigned int end;
+ long unsigned int fallback_start;
+ long unsigned int fallback_end;
+ pgprot_t pgprot;
+ unsigned int alignment;
+ enum execmem_range_flags flags;
+};
+
+struct execmem_info {
+ struct execmem_range ranges[5];
+};
+
+typedef __kernel_long_t __kernel_off_t;
+
+typedef __kernel_off_t off_t;
+
+typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
+
+struct char_device_struct {
+ struct char_device_struct *next;
+ unsigned int major;
+ unsigned int baseminor;
+ int minorct;
+ char name[64];
+ struct cdev *cdev;
+};
+
+struct file_clone_range {
+ __s64 src_fd;
+ __u64 src_offset;
+ __u64 src_length;
+ __u64 dest_offset;
+};
+
+struct fsuuid2 {
+ __u8 len;
+ __u8 uuid[16];
+};
+
+struct fs_sysfs_path {
+ __u8 len;
+ __u8 name[128];
+};
+
+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 fsxattr {
+ __u32 fsx_xflags;
+ __u32 fsx_extsize;
+ __u32 fsx_nextents;
+ __u32 fsx_projid;
+ __u32 fsx_cowextsize;
+ unsigned char fsx_pad[8];
+};
+
+struct fiemap_extent;
+
+struct fiemap_extent_info {
+ unsigned int fi_flags;
+ unsigned int fi_extents_mapped;
+ unsigned int fi_extents_max;
+ struct fiemap_extent *fi_extents_start;
+};
+
+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 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 fiemap_extent {
+ __u64 fe_logical;
+ __u64 fe_physical;
+ __u64 fe_length;
+ __u64 fe_reserved64[2];
+ __u32 fe_flags;
+ __u32 fe_reserved[3];
+};
+
+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 fd_range {
+ unsigned int from;
+ unsigned int to;
+};
+
+struct file_lock_context {
+ spinlock_t flc_lock;
+ struct list_head flc_flock;
+ struct list_head flc_posix;
+ struct list_head flc_lease;
+};
+
+struct file_lock_core {
+ struct file_lock_core *flc_blocker;
+ struct list_head flc_list;
+ struct hlist_node flc_link;
+ struct list_head flc_blocked_requests;
+ struct list_head flc_blocked_member;
+ fl_owner_t flc_owner;
+ unsigned int flc_flags;
+ unsigned char flc_type;
+ pid_t flc_pid;
+ int flc_link_cpu;
+ wait_queue_head_t flc_wait;
+ struct file *flc_file;
+};
+
+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_core c;
+ loff_t fl_start;
+ loff_t fl_end;
+ 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 lease_manager_operations;
+
+struct file_lease {
+ struct file_lock_core c;
+ struct fasync_struct *fl_fasync;
+ long unsigned int fl_break_time;
+ long unsigned int fl_downgrade_time;
+ const struct lease_manager_operations *fl_lmops;
+};
+
+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_lock_expirable)(struct file_lock *);
+ void (*lm_expire_lock)();
+};
+
+struct lease_manager_operations {
+ bool (*lm_break)(struct file_lease *);
+ int (*lm_change)(struct file_lease *, int, struct list_head *);
+ void (*lm_setup)(struct file_lease *, void **);
+ bool (*lm_breaker_owns_lease)(struct file_lease *);
+};
+
+struct constant_table {
+ const char *name;
+ int value;
+};
+
+typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
+
+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_PLUGGING = 12,
+ BIO_EMULATES_ZONE_APPEND = 13,
+ BIO_FLAG_LAST = 14,
+};
+
+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_ZONE_APPEND = 7,
+ REQ_OP_WRITE_ZEROES = 9,
+ REQ_OP_ZONE_OPEN = 10,
+ REQ_OP_ZONE_CLOSE = 11,
+ REQ_OP_ZONE_FINISH = 12,
+ REQ_OP_ZONE_RESET = 13,
+ REQ_OP_ZONE_RESET_ALL = 15,
+ REQ_OP_DRV_IN = 34,
+ REQ_OP_DRV_OUT = 35,
+ REQ_OP_LAST = 36,
+};
+
+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_ATOMIC = 27,
+ __REQ_NOUNMAP = 28,
+ __REQ_NR_BITS = 29,
+};
+
+struct folio_iter {
+ struct folio *folio;
+ size_t offset;
+ size_t length;
+ struct folio *_next;
+ size_t _seg_count;
+ int _i;
+};
+
+typedef int (*writepage_t)(struct folio *, struct writeback_control *, void *);
+
+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;
+ long unsigned int 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 fsnotify_mark_connector {
+ spinlock_t lock;
+ unsigned char type;
+ unsigned char prio;
+ short unsigned int flags;
+ union {
+ void *obj;
+ struct fsnotify_mark_connector *destroy_next;
+ };
+ struct hlist_head list;
+};
+
+struct file_handle {
+ __u32 handle_bytes;
+ int handle_type;
+ unsigned char f_handle[0];
+};
+
+struct fsnotify_sb_info {
+ struct fsnotify_mark_connector *sb_marks;
+ atomic_long_t watched_objects[3];
+};
+
+struct mount;
+
+struct mnt_namespace {
+ struct ns_common ns;
+ struct mount *root;
+ struct rb_root mounts;
+ struct user_namespace *user_ns;
+ struct ucounts *ucounts;
+ u64 seq;
+ wait_queue_head_t poll;
+ u64 event;
+ unsigned int nr_mounts;
+ unsigned int pending_mounts;
+ struct rb_node mnt_ns_tree_node;
+ refcount_t passive;
+};
+
+struct fsnotify_group;
+
+struct fsnotify_iter_info;
+
+struct fsnotify_mark;
+
+struct fsnotify_event;
+
+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 *);
+};
+
+enum fsnotify_group_prio {
+ FSNOTIFY_PRIO_NORMAL = 0,
+ FSNOTIFY_PRIO_CONTENT = 1,
+ FSNOTIFY_PRIO_PRE_CONTENT = 2,
+ __FSNOTIFY_PRIO_NUM = 3,
+};
+
+struct inotify_group_private_data {
+ spinlock_t idr_lock;
+ struct idr idr;
+ struct ucounts *ucounts;
+};
+
+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;
+ enum fsnotify_group_prio 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 *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,
+};
+
+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_INO64_GEN = 129,
+ FILEID_INO64_GEN_PARENT = 130,
+ FILEID_LUSTRE = 151,
+ FILEID_BCACHEFS_WITHOUT_PARENT = 177,
+ FILEID_BCACHEFS_WITH_PARENT = 178,
+ FILEID_KERNFS = 254,
+ FILEID_INVALID = 255,
+};
+
+struct fid {
+ union {
+ struct {
+ u32 ino;
+ u32 gen;
+ u32 parent_ino;
+ u32 parent_gen;
+ } i32;
+ struct {
+ u64 ino;
+ u32 gen;
+ } __attribute__((packed)) i64;
+ struct {
+ u32 block;
+ u16 partref;
+ u16 parent_partref;
+ u32 generation;
+ u32 parent_block;
+ u32 parent_generation;
+ } udf;
+ struct {
+ struct {} __empty_raw;
+ __u32 raw[0];
+ };
+ };
+};
+
+struct inotify_inode_mark {
+ struct fsnotify_mark fsn_mark;
+ int wd;
+};
+
+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 *mnt_pcp;
+ struct list_head mnt_mounts;
+ struct list_head mnt_child;
+ struct list_head mnt_instance;
+ const char *mnt_devname;
+ union {
+ struct rb_node mnt_node;
+ 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 *mnt_fsnotify_marks;
+ __u32 mnt_fsnotify_mask;
+ int mnt_id;
+ u64 mnt_id_unique;
+ 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;
+};
+
+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,
+};
+
+typedef u32 compat_sigset_word;
+
+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];
+};
+
+typedef struct {
+ compat_sigset_word sig[2];
+} compat_sigset_t;
+
+struct signalfd_ctx {
+ sigset_t sigmask;
+};
+
+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 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;
+};
+
+struct elf32_note {
+ Elf32_Word n_namesz;
+ Elf32_Word n_descsz;
+ Elf32_Word n_type;
+};
+
+struct __kernel_old_timeval {
+ __kernel_long_t tv_sec;
+ __kernel_long_t tv_usec;
+};
+
+struct old_timeval32 {
+ old_time32_t tv_sec;
+ s32 tv_usec;
+};
+
+typedef void (*exitcall_t)();
+
+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 *);
+ long unsigned int min_coredump;
+};
+
+typedef u32 __compat_uid_t;
+
+typedef u32 __compat_gid_t;
+
+enum cache_type {
+ CACHE_TYPE_NOCACHE = 0,
+ CACHE_TYPE_INST = 1,
+ CACHE_TYPE_DATA = 2,
+ CACHE_TYPE_SEPARATE = 3,
+ CACHE_TYPE_UNIFIED = 4,
+};
+
+typedef compat_ulong_t compat_elf_greg_t;
+
+typedef compat_elf_greg_t compat_elf_gregset_t[32];
+
+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 int 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 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 compat_elf_prstatus {
+ struct compat_elf_prstatus_common common;
+ compat_elf_gregset_t pr_reg;
+ compat_int_t pr_fpvalid;
+};
+
+struct linux_binprm {
+ struct vm_area_struct *vma;
+ long unsigned int vma_pages;
+ long unsigned int argmin;
+ struct mm_struct *mm;
+ long unsigned int p;
+ 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;
+ long unsigned int loader;
+ long unsigned int exec;
+ struct rlimit rlim_stack;
+ char buf[256];
+};
+
+struct core_vma_metadata;
+
+struct coredump_params {
+ const kernel_siginfo_t *siginfo;
+ struct file *file;
+ long unsigned int limit;
+ long unsigned int 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;
+};
+
+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 core_vma_metadata {
+ long unsigned int start;
+ long unsigned int end;
+ long unsigned int flags;
+ long unsigned int dump_size;
+ long unsigned int pgoff;
+ struct file *file;
+};
+
+struct arch_elf_state {};
+
+struct memelfnote {
+ const char *name;
+ int type;
+ unsigned int datasz;
+ void *data;
+};
+
+struct elf_thread_core_info {
+ struct elf_thread_core_info *next;
+ struct task_struct *task;
+ struct compat_elf_prstatus prstatus;
+ struct memelfnote notes[0];
+};
+
+struct elf_note_info {
+ struct elf_thread_core_info *thread;
+ struct memelfnote psinfo;
+ struct memelfnote signote;
+ struct memelfnote auxv;
+ struct memelfnote files;
+ compat_siginfo_t csigdata;
+ size_t size;
+ int thread_notes;
+};
+
+struct fs_struct {
+ int users;
+ spinlock_t lock;
+ seqcount_spinlock_t seq;
+ int umask;
+ int in_exec;
+ struct path root;
+ struct path pwd;
+};
+
+enum handle_to_path_flags {
+ HANDLE_CHECK_PERMS = 1,
+ HANDLE_CHECK_SUBTREE = 2,
+};
+
+struct handle_to_path_ctx {
+ struct path root;
+ enum handle_to_path_flags flags;
+ unsigned int fh_flags;
+};
+
+typedef u32 nlink_t;
+
+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,
+};
+
+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;
+};
+
+typedef int (*proc_write_t)(struct file *, char *, size_t);
+
+struct nsset {
+ unsigned int flags;
+ struct nsproxy *nsproxy;
+ struct fs_struct *fs;
+ const struct cred *cred;
+};
+
+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];
+};
+
+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 *);
+ int lsmid;
+};
+
+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;
+};
+
+struct pde_opener {
+ struct list_head lh;
+ struct file *file;
+ bool closing;
+ struct completion *c;
+};
+
+enum {
+ BIAS = 2147483648,
+};
+
+typedef __kernel_ulong_t ino_t;
+
+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,
+};
+
+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,
+};
+
+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 simple_xattrs {
+ struct rb_root rb_root;
+ rwlock_t lock;
+};
+
+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 simple_xattr {
+ struct rb_node rb_node;
+ char *name;
+ size_t size;
+ char value[0];
+};
+
+enum netfs_io_source {
+ NETFS_SOURCE_UNKNOWN = 0,
+ NETFS_FILL_WITH_ZEROES = 1,
+ NETFS_DOWNLOAD_FROM_SERVER = 2,
+ NETFS_READ_FROM_CACHE = 3,
+ NETFS_INVALID_READ = 4,
+ NETFS_UPLOAD_TO_SERVER = 5,
+ NETFS_WRITE_TO_CACHE = 6,
+ NETFS_INVALID_WRITE = 7,
+} __attribute__((mode(byte)));
+
+typedef void (*netfs_io_terminated_t)(void *, ssize_t, bool);
+
+struct netfs_io_request;
+
+struct netfs_io_subrequest;
+
+struct netfs_io_stream;
+
+struct netfs_request_ops {
+ mempool_t *request_pool;
+ mempool_t *subrequest_pool;
+ int (*init_request)(struct netfs_io_request *, struct file *);
+ void (*free_request)(struct netfs_io_request *);
+ void (*free_subrequest)(struct netfs_io_subrequest *);
+ void (*expand_readahead)(struct netfs_io_request *);
+ int (*prepare_read)(struct netfs_io_subrequest *);
+ void (*issue_read)(struct netfs_io_subrequest *);
+ bool (*is_still_valid)(struct netfs_io_request *);
+ int (*check_write_begin)(struct file *, loff_t, unsigned int, struct folio **, void **);
+ void (*done)(struct netfs_io_request *);
+ void (*update_i_size)(struct inode *, loff_t);
+ void (*post_modify)(struct inode *);
+ void (*begin_writeback)(struct netfs_io_request *);
+ void (*prepare_write)(struct netfs_io_subrequest *);
+ void (*issue_write)(struct netfs_io_subrequest *);
+ void (*retry_request)(struct netfs_io_request *, struct netfs_io_stream *);
+ void (*invalidate_cache)(struct netfs_io_request *);
+};
+
+struct netfs_group {
+ refcount_t ref;
+ void (*free)(struct netfs_group *);
+};
+
+struct netfs_io_stream {
+ struct netfs_io_subrequest *construct;
+ size_t sreq_max_len;
+ unsigned int sreq_max_segs;
+ unsigned int submit_off;
+ unsigned int submit_len;
+ unsigned int submit_extendable_to;
+ void (*prepare_write)(struct netfs_io_subrequest *);
+ void (*issue_write)(struct netfs_io_subrequest *);
+ struct list_head subrequests;
+ struct netfs_io_subrequest *front;
+ long long unsigned int collected_to;
+ size_t transferred;
+ enum netfs_io_source source;
+ short unsigned int error;
+ unsigned char stream_nr;
+ bool avail;
+ bool active;
+ bool need_retry;
+ bool failed;
+};
+
+struct netfs_io_subrequest {
+ struct netfs_io_request *rreq;
+ struct work_struct work;
+ struct list_head rreq_link;
+ struct iov_iter io_iter;
+ long long unsigned int start;
+ size_t len;
+ size_t transferred;
+ size_t consumed;
+ size_t prev_donated;
+ size_t next_donated;
+ refcount_t ref;
+ short int error;
+ short unsigned int debug_index;
+ unsigned int nr_segs;
+ enum netfs_io_source source;
+ unsigned char stream_nr;
+ unsigned char curr_folioq_slot;
+ unsigned char curr_folio_order;
+ struct folio_queue *curr_folioq;
+ long unsigned int flags;
+};
+
+struct netfs_cache_ops;
+
+struct netfs_cache_resources {
+ const struct netfs_cache_ops *ops;
+ void *cache_priv;
+ void *cache_priv2;
+ unsigned int debug_id;
+ unsigned int inval_counter;
+};
+
+enum netfs_read_from_hole {
+ NETFS_READ_HOLE_IGNORE = 0,
+ NETFS_READ_HOLE_CLEAR = 1,
+ NETFS_READ_HOLE_FAIL = 2,
+};
+
+struct netfs_cache_ops {
+ void (*end_operation)(struct netfs_cache_resources *);
+ int (*read)(struct netfs_cache_resources *, loff_t, struct iov_iter *, enum netfs_read_from_hole, netfs_io_terminated_t, void *);
+ int (*write)(struct netfs_cache_resources *, loff_t, struct iov_iter *, netfs_io_terminated_t, void *);
+ void (*issue_write)(struct netfs_io_subrequest *);
+ void (*expand_readahead)(struct netfs_cache_resources *, long long unsigned int *, long long unsigned int *, long long unsigned int);
+ enum netfs_io_source (*prepare_read)(struct netfs_io_subrequest *, long long unsigned int);
+ void (*prepare_write_subreq)(struct netfs_io_subrequest *);
+ int (*prepare_write)(struct netfs_cache_resources *, loff_t *, size_t *, size_t, loff_t, bool);
+ enum netfs_io_source (*prepare_ondemand_read)(struct netfs_cache_resources *, loff_t, size_t *, loff_t, long unsigned int *, ino_t);
+ int (*query_occupancy)(struct netfs_cache_resources *, loff_t, size_t, size_t, loff_t *, size_t *);
+};
+
+enum netfs_io_origin {
+ NETFS_READAHEAD = 0,
+ NETFS_READPAGE = 1,
+ NETFS_READ_GAPS = 2,
+ NETFS_READ_FOR_WRITE = 3,
+ NETFS_DIO_READ = 4,
+ NETFS_WRITEBACK = 5,
+ NETFS_WRITETHROUGH = 6,
+ NETFS_UNBUFFERED_WRITE = 7,
+ NETFS_DIO_WRITE = 8,
+ NETFS_PGPRIV2_COPY_TO_CACHE = 9,
+ nr__netfs_io_origin = 10,
+} __attribute__((mode(byte)));
+
+struct netfs_io_request {
+ union {
+ struct work_struct work;
+ struct callback_head rcu;
+ };
+ struct inode *inode;
+ struct address_space *mapping;
+ struct kiocb *iocb;
+ struct netfs_cache_resources cache_resources;
+ struct readahead_control *ractl;
+ struct list_head proc_link;
+ struct list_head subrequests;
+ struct netfs_io_stream io_streams[2];
+ struct netfs_group *group;
+ struct folio_queue *buffer;
+ struct folio_queue *buffer_tail;
+ struct iov_iter iter;
+ struct iov_iter io_iter;
+ void *netfs_priv;
+ void *netfs_priv2;
+ struct bio_vec *direct_bv;
+ unsigned int direct_bv_count;
+ unsigned int debug_id;
+ unsigned int rsize;
+ unsigned int wsize;
+ atomic_t subreq_counter;
+ unsigned int nr_group_rel;
+ spinlock_t lock;
+ atomic_t nr_outstanding;
+ long long unsigned int submitted;
+ long long unsigned int len;
+ size_t transferred;
+ long int error;
+ enum netfs_io_origin origin;
+ bool direct_bv_unpin;
+ u8 buffer_head_slot;
+ u8 buffer_tail_slot;
+ long long unsigned int i_size;
+ long long unsigned int start;
+ atomic64_t issued_to;
+ long long unsigned int collected_to;
+ long long unsigned int cleaned_to;
+ long unsigned int no_unlock_folio;
+ size_t prev_donated;
+ refcount_t ref;
+ long unsigned int flags;
+ const struct netfs_request_ops *netfs_ops;
+ void (*cleanup)(struct netfs_io_request *);
+};
+
+typedef __u16 __le16;
+
+typedef __u32 __le32;
+
+typedef __u64 __le64;
+
+typedef unsigned int tid_t;
+
+struct transaction_chp_stats_s {
+ long unsigned int 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;
+ long unsigned int 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;
+ long unsigned int t_max_wait;
+ long unsigned int t_start;
+ long unsigned int 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;
+ long unsigned int 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 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 *);
+};
+
+struct crypto_alg;
+
+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 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_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_shash {
+ unsigned int descsize;
+ struct crypto_tfm base;
+};
+
+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;
+ long unsigned int h_start_jiffies;
+ unsigned int h_requested_credits;
+ unsigned int saved_alloc_context;
+};
+
+struct transaction_run_stats_s {
+ long unsigned int rs_wait;
+ long unsigned int rs_request_delay;
+ long unsigned int rs_running;
+ long unsigned int rs_locked;
+ long unsigned int rs_flushing;
+ long unsigned int rs_logging;
+ __u32 rs_handle_count;
+ __u32 rs_blocks;
+ __u32 rs_blocks_logged;
+};
+
+struct transaction_stats_s {
+ long unsigned int ts_tid;
+ long unsigned int 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 {
+ long unsigned int j_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;
+ long unsigned int j_head;
+ long unsigned int j_tail;
+ long unsigned int j_free;
+ long unsigned int j_first;
+ long unsigned int j_last;
+ long unsigned int j_fc_first;
+ long unsigned int j_fc_off;
+ long unsigned int j_fc_last;
+ struct block_device *j_dev;
+ int j_blocksize;
+ long long unsigned int j_blk_offset;
+ char j_devname[56];
+ struct block_device *j_fs_dev;
+ errseq_t j_fs_dev_wb_err;
+ 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;
+ int j_transaction_overhead_buffers;
+ long unsigned int 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];
+};
+
+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 jbd2_inode {
+ transaction_t *i_transaction;
+ transaction_t *i_next_transaction;
+ struct list_head i_list;
+ struct inode *i_vfs_inode;
+ long unsigned int i_flags;
+ loff_t i_dirty_start;
+ loff_t i_dirty_end;
+};
+
+struct bgl_lock {
+ spinlock_t lock;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct blockgroup_lock {
+ struct bgl_lock locks[128];
+};
+
+struct fscrypt_dummy_policy {};
+
+typedef int ext4_grpblk_t;
+
+typedef long long unsigned int ext4_fsblk_t;
+
+typedef __u32 ext4_lblk_t;
+
+typedef unsigned int ext4_group_t;
+
+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_blocks {
+ struct rb_root root;
+ struct callback_head rcu;
+};
+
+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;
+};
+
+struct flex_groups {
+ atomic64_t free_clusters;
+ atomic_t free_inodes;
+ atomic_t used_dirs;
+};
+
+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_es_tree {
+ struct rb_root root;
+ struct extent_status *cache_es;
+};
+
+struct ext4_es_stats {
+ long unsigned int 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_pending_tree {
+ struct rb_root root;
+};
+
+struct ext4_fc_stats {
+ unsigned int fc_ineligible_reason_count[10];
+ long unsigned int fc_num_commits;
+ long unsigned int fc_ineligible_commits;
+ long unsigned int fc_failed_commits;
+ long unsigned int fc_skipped_commits;
+ long unsigned int fc_numblks;
+ u64 s_fc_avg_commit_time;
+};
+
+struct ext4_fc_alloc_region {
+ ext4_lblk_t lblk;
+ ext4_fsblk_t pblk;
+ int ino;
+ int len;
+};
+
+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_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;
+ long unsigned int 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;
+ atomic_t i_unwritten;
+ 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;
+ unsigned int i_reserved_data_blocks;
+ 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;
+ struct ext4_pending_tree i_pending_tree;
+ __u16 i_extra_isize;
+ u16 i_inline_off;
+ u16 i_inline_size;
+ spinlock_t i_completed_io_lock;
+ struct list_head i_rsv_conversion_list;
+ struct work_struct i_rsv_conversion_work;
+ spinlock_t i_block_reservation_lock;
+ tid_t i_sync_tid;
+ tid_t i_datasync_tid;
+ __u32 i_csum_seed;
+ kprojid_t i_projid;
+};
+
+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 ext4_journal_trigger {
+ struct jbd2_buffer_trigger_type tr_triggers;
+ struct super_block *sb;
+};
+
+struct ext4_orphan_block {
+ atomic_t ob_free_entries;
+ struct buffer_head *ob_bh;
+};
+
+struct ext4_orphan_info {
+ int of_blocks;
+ __u32 of_csum_seed;
+ struct ext4_orphan_block *of_binfo;
+};
+
+struct ext4_group_info;
+
+struct ext4_locality_group;
+
+struct ext4_li_request;
+
+struct mb_cache;
+
+struct dax_device;
+
+struct ext4_sb_info {
+ long unsigned int s_desc_size;
+ long unsigned int s_inodes_per_block;
+ long unsigned int s_blocks_per_group;
+ long unsigned int s_clusters_per_group;
+ long unsigned int s_inodes_per_group;
+ long unsigned int s_itb_per_group;
+ long unsigned int s_gdb_count;
+ long unsigned int s_desc_per_block;
+ ext4_group_t s_groups_count;
+ ext4_group_t s_blockfile_groups;
+ long unsigned int 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 **s_group_desc;
+ unsigned int s_mount_opt;
+ unsigned int s_mount_opt2;
+ long unsigned int 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;
+ short unsigned int s_mount_state;
+ short unsigned int 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;
+ long unsigned int s_ext4_flags;
+ struct mutex s_orphan_lock;
+ struct list_head s_orphan;
+ struct ext4_orphan_info s_orphan_info;
+ long unsigned int s_commit_interval;
+ u32 s_max_batch_time;
+ u32 s_min_batch_time;
+ struct file *s_journal_bdev_file;
+ unsigned int s_want_extra_isize;
+ struct ext4_system_blocks *s_system_blks;
+ struct ext4_group_info ***s_group_info;
+ struct inode *s_buddy_cache;
+ spinlock_t s_md_lock;
+ short unsigned int *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[2];
+ 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;
+ long unsigned int 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;
+ long unsigned int s_mb_last_group;
+ long unsigned int 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 *s_locality_groups;
+ long unsigned int 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 **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;
+ long unsigned int 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 int 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_group_info {
+ long unsigned int 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];
+};
+
+struct ext4_locality_group {
+ struct mutex lg_mutex;
+ struct list_head lg_prealloc_list[10];
+ spinlock_t lg_prealloc_lock;
+};
+
+enum ext4_li_mode {
+ EXT4_LI_MODE_PREFETCH_BBITMAP = 0,
+ EXT4_LI_MODE_ITABLE = 1,
+};
+
+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;
+ long unsigned int lr_next_sched;
+ long unsigned int lr_timeout;
+};
+
+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,
+};
+
+typedef long unsigned int cycles_t;
+
+struct fstrim_range {
+ __u64 start;
+ __u64 len;
+ __u64 minlen;
+};
+
+enum blk_default_limits {
+ BLK_MAX_SEGMENTS = 128,
+ BLK_SAFE_MAX_SECTORS = 255,
+ BLK_MAX_SEGMENT_SIZE = 65536,
+ BLK_SEG_BOUNDARY_MASK = 4294967295,
+};
+
+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 {
+ 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,
+};
+
+enum ext4_journal_trigger_type {
+ EXT4_JTR_ORPHAN_FILE = 0,
+ EXT4_JTR_NONE = 1,
+};
+
+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;
+ short unsigned int pa_type;
+ union {
+ rwlock_t *inode_lock;
+ spinlock_t *lg_lock;
+ } pa_node_lock;
+ struct inode *pa_inode;
+};
+
+enum {
+ MB_INODE_PA = 0,
+ MB_GROUP_PA = 1,
+};
+
+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_flags;
+ __u32 ac_groups_linear_remaining;
+ __u16 ac_groups_scanned;
+ __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 folio *ac_bitmap_folio;
+ struct folio *ac_buddy_folio;
+ struct ext4_prealloc_space *ac_pa;
+ struct ext4_locality_group *ac_lg;
+};
+
+struct ext4_buddy {
+ struct folio *bd_buddy_folio;
+ void *bd_buddy;
+ struct folio *bd_bitmap_folio;
+ void *bd_bitmap;
+ struct ext4_group_info *bd_info;
+ struct super_block *bd_sb;
+ __u16 bd_blkbits;
+ ext4_group_t bd_group;
+};
+
+typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
+
+struct sg {
+ struct ext4_group_info info;
+ ext4_grpblk_t counters[18];
+};
+
+struct shash_desc {
+ struct crypto_shash *tfm;
+ void *__ctx[0];
+};
+
+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 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 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;
+
+enum jbd2_shrink_type {
+ JBD2_SHRINK_DESTROY = 0,
+ JBD2_SHRINK_BUSY_STOP = 1,
+ JBD2_SHRINK_BUSY_SKIP = 2,
+};
+
+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_mount_options {
+ kuid_t fs_uid;
+ kgid_t fs_gid;
+ short unsigned int fs_fmask;
+ short unsigned int fs_dmask;
+ short unsigned int codepage;
+ int time_offset;
+ char *iocharset;
+ short unsigned int shortname;
+ unsigned char name_check;
+ unsigned char errors;
+ unsigned char nfs;
+ short unsigned int 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;
+ unsigned int debug: 1;
+};
+
+struct fatent_operations;
+
+struct msdos_sb_info {
+ short unsigned int sec_per_clus;
+ short unsigned int cluster_bits;
+ unsigned int cluster_size;
+ unsigned char fats;
+ unsigned char fat_bits;
+ short unsigned int fat_start;
+ long unsigned int fat_length;
+ long unsigned int dir_start;
+ short unsigned int dir_entries;
+ long unsigned int data_start;
+ long unsigned int max_cluster;
+ long unsigned int root_cluster;
+ long unsigned int 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;
+};
+
+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 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_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;
+};
+
+struct fat_cache {
+ struct list_head cache_list;
+ int nr_contig;
+ int fcluster;
+ int dcluster;
+};
+
+struct fat_cache_id {
+ unsigned int id;
+ int nr_contig;
+ int fcluster;
+ int dcluster;
+};
+
+enum file_time_flags {
+ S_ATIME = 1,
+ S_MTIME = 2,
+ S_CTIME = 4,
+ S_VERSION = 8,
+};
+
+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;
+};
+
+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_slot_info {
+ loff_t i_pos;
+ loff_t slot_off;
+ int nr_slots;
+ struct msdos_dir_entry *de;
+ struct buffer_head *bh;
+};
+
+struct shortname_info {
+ unsigned char lower: 1;
+ unsigned char upper: 1;
+ unsigned char valid: 1;
+};
+
+typedef unsigned char Byte;
+
+typedef long unsigned int 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 iso_inode_info {
+ long unsigned int i_iget5_block;
+ long unsigned int i_iget5_offset;
+ unsigned int i_first_extent;
+ unsigned char i_file_format;
+ unsigned char i_format_parm[3];
+ long unsigned int i_next_section_block;
+ long unsigned int i_next_section_offset;
+ off_t i_section_size;
+ struct inode vfs_inode;
+};
+
+struct posix_acl_entry {
+ short int e_tag;
+ short unsigned int 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];
+};
+
+enum iter_type {
+ ITER_UBUF = 0,
+ ITER_IOVEC = 1,
+ ITER_BVEC = 2,
+ ITER_KVEC = 3,
+ ITER_FOLIOQ = 4,
+ ITER_XARRAY = 5,
+ ITER_DISCARD = 6,
+};
+
+struct xdr_buf {
+ struct kvec head[1];
+ struct kvec tail[1];
+ struct bio_vec *bvec;
+ struct page **pages;
+ unsigned int page_base;
+ unsigned int page_len;
+ unsigned int flags;
+ unsigned int buflen;
+ unsigned int len;
+};
+
+struct rpc_rqst;
+
+struct xdr_stream {
+ __be32 *p;
+ struct xdr_buf *buf;
+ __be32 *end;
+ struct kvec *iov;
+ struct kvec scratch;
+ struct page **page_ptr;
+ void *page_kaddr;
+ unsigned int nwords;
+ struct rpc_rqst *rqst;
+};
+
+struct lwq_node {
+ struct llist_node node;
+};
+
+struct rpc_xprt;
+
+struct rpc_task;
+
+struct rpc_cred;
+
+struct rpc_rqst {
+ struct rpc_xprt *rq_xprt;
+ struct xdr_buf rq_snd_buf;
+ struct xdr_buf rq_rcv_buf;
+ struct rpc_task *rq_task;
+ struct rpc_cred *rq_cred;
+ __be32 rq_xid;
+ int rq_cong;
+ u32 rq_seqno;
+ int rq_enc_pages_num;
+ struct page **rq_enc_pages;
+ void (*rq_release_snd_buf)(struct rpc_rqst *);
+ union {
+ struct list_head rq_list;
+ struct rb_node rq_recv;
+ };
+ struct list_head rq_xmit;
+ struct list_head rq_xmit2;
+ void *rq_buffer;
+ size_t rq_callsize;
+ void *rq_rbuffer;
+ size_t rq_rcvsize;
+ size_t rq_xmit_bytes_sent;
+ size_t rq_reply_bytes_recvd;
+ struct xdr_buf rq_private_buf;
+ long unsigned int rq_majortimeo;
+ long unsigned int rq_minortimeo;
+ long unsigned int rq_timeout;
+ ktime_t rq_rtt;
+ unsigned int rq_retries;
+ unsigned int rq_connect_cookie;
+ atomic_t rq_pin;
+ u32 rq_bytes_sent;
+ ktime_t rq_xtime;
+ int rq_ntrans;
+ struct lwq_node rq_bc_list;
+ long unsigned int rq_bc_pa_state;
+ struct list_head rq_bc_pa_list;
+};
+
+typedef void (*kxdreproc_t)(struct rpc_rqst *, struct xdr_stream *, const void *);
+
+typedef int (*kxdrdproc_t)(struct rpc_rqst *, struct xdr_stream *, void *);
+
+struct rpc_procinfo;
+
+struct rpc_message {
+ const struct rpc_procinfo *rpc_proc;
+ void *rpc_argp;
+ void *rpc_resp;
+ const struct cred *rpc_cred;
+};
+
+struct rpc_procinfo {
+ u32 p_proc;
+ kxdreproc_t p_encode;
+ kxdrdproc_t p_decode;
+ unsigned int p_arglen;
+ unsigned int p_replen;
+ unsigned int p_timer;
+ u32 p_statidx;
+ const char *p_name;
+};
+
+struct rpc_wait {
+ struct list_head list;
+ struct list_head links;
+ struct list_head timer_list;
+};
+
+struct rpc_timeout {
+ long unsigned int to_initval;
+ long unsigned int to_maxval;
+ long unsigned int to_increment;
+ unsigned int to_retries;
+ unsigned char to_exponential;
+};
+
+struct rpc_wait_queue;
+
+struct rpc_call_ops;
+
+struct rpc_clnt;
+
+struct rpc_task {
+ atomic_t tk_count;
+ int tk_status;
+ struct list_head tk_task;
+ void (*tk_callback)(struct rpc_task *);
+ void (*tk_action)(struct rpc_task *);
+ long unsigned int tk_timeout;
+ long unsigned int tk_runstate;
+ struct rpc_wait_queue *tk_waitqueue;
+ union {
+ struct work_struct tk_work;
+ struct rpc_wait tk_wait;
+ } u;
+ struct rpc_message tk_msg;
+ void *tk_calldata;
+ const struct rpc_call_ops *tk_ops;
+ struct rpc_clnt *tk_client;
+ struct rpc_xprt *tk_xprt;
+ struct rpc_cred *tk_op_cred;
+ struct rpc_rqst *tk_rqstp;
+ struct workqueue_struct *tk_workqueue;
+ ktime_t tk_start;
+ pid_t tk_owner;
+ int tk_rpc_status;
+ short unsigned int tk_flags;
+ short unsigned int tk_timeouts;
+ unsigned char tk_priority: 2;
+ unsigned char tk_garb_retry: 2;
+ unsigned char tk_cred_retry: 2;
+};
+
+struct rpc_timer {
+ struct list_head list;
+ long unsigned int expires;
+ struct delayed_work dwork;
+};
+
+struct rpc_wait_queue {
+ spinlock_t lock;
+ struct list_head tasks[4];
+ unsigned char maxpriority;
+ unsigned char priority;
+ unsigned char nr;
+ unsigned int qlen;
+ struct rpc_timer timer_list;
+};
+
+struct rpc_call_ops {
+ void (*rpc_call_prepare)(struct rpc_task *, void *);
+ void (*rpc_call_done)(struct rpc_task *, void *);
+ void (*rpc_count_stats)(struct rpc_task *, void *);
+ void (*rpc_release)(void *);
+};
+
+enum xprtsec_policies {
+ RPC_XPRTSEC_NONE = 0,
+ RPC_XPRTSEC_TLS_ANON = 1,
+ RPC_XPRTSEC_TLS_X509 = 2,
+};
+
+struct xprtsec_parms {
+ enum xprtsec_policies policy;
+ key_serial_t cert_serial;
+ key_serial_t privkey_serial;
+};
+
+struct rpc_pipe_dir_head {
+ struct list_head pdh_entries;
+ struct dentry *pdh_dentry;
+};
+
+struct rpc_rtt {
+ long unsigned int timeo;
+ long unsigned int srtt[5];
+ long unsigned int sdrtt[5];
+ int ntimeouts[5];
+};
+
+struct rpc_xprt_switch;
+
+struct rpc_xprt_iter_ops;
+
+struct rpc_xprt_iter {
+ struct rpc_xprt_switch *xpi_xpswitch;
+ struct rpc_xprt *xpi_cursor;
+ const struct rpc_xprt_iter_ops *xpi_ops;
+};
+
+struct rpc_auth;
+
+struct rpc_stat;
+
+struct rpc_iostats;
+
+struct rpc_program;
+
+struct rpc_sysfs_client;
+
+struct rpc_clnt {
+ refcount_t cl_count;
+ unsigned int cl_clid;
+ struct list_head cl_clients;
+ struct list_head cl_tasks;
+ atomic_t cl_pid;
+ spinlock_t cl_lock;
+ struct rpc_xprt *cl_xprt;
+ const struct rpc_procinfo *cl_procinfo;
+ u32 cl_prog;
+ u32 cl_vers;
+ u32 cl_maxproc;
+ struct rpc_auth *cl_auth;
+ struct rpc_stat *cl_stats;
+ struct rpc_iostats *cl_metrics;
+ unsigned int cl_softrtry: 1;
+ unsigned int cl_softerr: 1;
+ unsigned int cl_discrtry: 1;
+ unsigned int cl_noretranstimeo: 1;
+ unsigned int cl_autobind: 1;
+ unsigned int cl_chatty: 1;
+ unsigned int cl_shutdown: 1;
+ struct xprtsec_parms cl_xprtsec;
+ struct rpc_rtt *cl_rtt;
+ const struct rpc_timeout *cl_timeout;
+ atomic_t cl_swapper;
+ int cl_nodelen;
+ char cl_nodename[65];
+ struct rpc_pipe_dir_head cl_pipedir_objects;
+ struct rpc_clnt *cl_parent;
+ struct rpc_rtt cl_rtt_default;
+ struct rpc_timeout cl_timeout_default;
+ const struct rpc_program *cl_program;
+ const char *cl_principal;
+ struct rpc_sysfs_client *cl_sysfs;
+ union {
+ struct rpc_xprt_iter cl_xpi;
+ struct work_struct cl_work;
+ };
+ const struct cred *cl_cred;
+ unsigned int cl_max_connect;
+ struct super_block *pipefs_sb;
+};
+
+struct rpc_xprt_ops;
+
+struct svc_xprt;
+
+struct svc_serv;
+
+struct xprt_class;
+
+struct rpc_sysfs_xprt;
+
+struct rpc_xprt {
+ struct kref kref;
+ const struct rpc_xprt_ops *ops;
+ unsigned int id;
+ const struct rpc_timeout *timeout;
+ struct __kernel_sockaddr_storage addr;
+ size_t addrlen;
+ int prot;
+ long unsigned int cong;
+ long unsigned int cwnd;
+ size_t max_payload;
+ struct rpc_wait_queue binding;
+ struct rpc_wait_queue sending;
+ struct rpc_wait_queue pending;
+ struct rpc_wait_queue backlog;
+ struct list_head free;
+ unsigned int max_reqs;
+ unsigned int min_reqs;
+ unsigned int num_reqs;
+ long unsigned int state;
+ unsigned char resvport: 1;
+ unsigned char reuseport: 1;
+ atomic_t swapper;
+ unsigned int bind_index;
+ struct list_head xprt_switch;
+ long unsigned int bind_timeout;
+ long unsigned int reestablish_timeout;
+ struct xprtsec_parms xprtsec;
+ unsigned int connect_cookie;
+ struct work_struct task_cleanup;
+ struct timer_list timer;
+ long unsigned int last_used;
+ long unsigned int idle_timeout;
+ long unsigned int connect_timeout;
+ long unsigned int max_reconnect_timeout;
+ atomic_long_t queuelen;
+ spinlock_t transport_lock;
+ spinlock_t reserve_lock;
+ spinlock_t queue_lock;
+ u32 xid;
+ struct rpc_task *snd_task;
+ struct list_head xmit_queue;
+ atomic_long_t xmit_queuelen;
+ struct svc_xprt *bc_xprt;
+ struct svc_serv *bc_serv;
+ unsigned int bc_alloc_max;
+ unsigned int bc_alloc_count;
+ atomic_t bc_slot_count;
+ spinlock_t bc_pa_lock;
+ struct list_head bc_pa_list;
+ struct rb_root recv_queue;
+ struct {
+ long unsigned int bind_count;
+ long unsigned int connect_count;
+ long unsigned int connect_start;
+ long unsigned int connect_time;
+ long unsigned int sends;
+ long unsigned int recvs;
+ long unsigned int bad_xids;
+ long unsigned int max_slots;
+ long long unsigned int req_u;
+ long long unsigned int bklog_u;
+ long long unsigned int sending_u;
+ long long unsigned int pending_u;
+ } stat;
+ struct net *xprt_net;
+ netns_tracker ns_tracker;
+ const char *servername;
+ const char *address_strings[6];
+ struct callback_head rcu;
+ const struct xprt_class *xprt_class;
+ struct rpc_sysfs_xprt *xprt_sysfs;
+ bool main;
+};
+
+struct rpc_credops;
+
+struct rpc_cred {
+ struct hlist_node cr_hash;
+ struct list_head cr_lru;
+ struct callback_head cr_rcu;
+ struct rpc_auth *cr_auth;
+ const struct rpc_credops *cr_ops;
+ long unsigned int cr_expire;
+ long unsigned int cr_flags;
+ refcount_t cr_count;
+ const struct cred *cr_cred;
+};
+
+struct rpc_task_setup {
+ struct rpc_task *task;
+ struct rpc_clnt *rpc_client;
+ struct rpc_xprt *rpc_xprt;
+ struct rpc_cred *rpc_op_cred;
+ const struct rpc_message *rpc_message;
+ const struct rpc_call_ops *callback_ops;
+ void *callback_data;
+ struct workqueue_struct *workqueue;
+ short unsigned int flags;
+ signed char priority;
+};
+
+typedef u32 rpc_authflavor_t;
+
+struct auth_cred {
+ const struct cred *cred;
+ const char *principal;
+};
+
+struct rpc_authops;
+
+struct rpc_cred_cache;
+
+struct rpc_auth {
+ unsigned int au_cslack;
+ unsigned int au_rslack;
+ unsigned int au_verfsize;
+ unsigned int au_ralign;
+ long unsigned int au_flags;
+ const struct rpc_authops *au_ops;
+ rpc_authflavor_t au_flavor;
+ refcount_t au_count;
+ struct rpc_cred_cache *au_credcache;
+};
+
+struct rpc_credops {
+ const char *cr_name;
+ int (*cr_init)(struct rpc_auth *, struct rpc_cred *);
+ void (*crdestroy)(struct rpc_cred *);
+ int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
+ int (*crmarshal)(struct rpc_task *, struct xdr_stream *);
+ int (*crrefresh)(struct rpc_task *);
+ int (*crvalidate)(struct rpc_task *, struct xdr_stream *);
+ int (*crwrap_req)(struct rpc_task *, struct xdr_stream *);
+ int (*crunwrap_resp)(struct rpc_task *, struct xdr_stream *);
+ int (*crkey_timeout)(struct rpc_cred *);
+ char * (*crstringify_acceptor)(struct rpc_cred *);
+ bool (*crneed_reencode)(struct rpc_task *);
+};
+
+struct rpc_auth_create_args;
+
+struct rpcsec_gss_info;
+
+struct rpc_authops {
+ struct module *owner;
+ rpc_authflavor_t au_flavor;
+ char *au_name;
+ struct rpc_auth * (*create)(const struct rpc_auth_create_args *, struct rpc_clnt *);
+ void (*destroy)(struct rpc_auth *);
+ int (*hash_cred)(struct auth_cred *, unsigned int);
+ struct rpc_cred * (*lookup_cred)(struct rpc_auth *, struct auth_cred *, int);
+ struct rpc_cred * (*crcreate)(struct rpc_auth *, struct auth_cred *, int, gfp_t);
+ rpc_authflavor_t (*info2flavor)(struct rpcsec_gss_info *);
+ int (*flavor2info)(rpc_authflavor_t, struct rpcsec_gss_info *);
+ int (*key_timeout)(struct rpc_auth *, struct rpc_cred *);
+ int (*ping)(struct rpc_clnt *);
+};
+
+struct rpc_auth_create_args {
+ rpc_authflavor_t pseudoflavor;
+ const char *target_name;
+};
+
+struct rpcsec_gss_oid {
+ unsigned int len;
+ u8 data[32];
+};
+
+struct rpcsec_gss_info {
+ struct rpcsec_gss_oid oid;
+ u32 qop;
+ u32 service;
+};
+
+struct rpc_xprt_ops {
+ void (*set_buffer_size)(struct rpc_xprt *, size_t, size_t);
+ int (*reserve_xprt)(struct rpc_xprt *, struct rpc_task *);
+ void (*release_xprt)(struct rpc_xprt *, struct rpc_task *);
+ void (*alloc_slot)(struct rpc_xprt *, struct rpc_task *);
+ void (*free_slot)(struct rpc_xprt *, struct rpc_rqst *);
+ void (*rpcbind)(struct rpc_task *);
+ void (*set_port)(struct rpc_xprt *, short unsigned int);
+ void (*connect)(struct rpc_xprt *, struct rpc_task *);
+ int (*get_srcaddr)(struct rpc_xprt *, char *, size_t);
+ short unsigned int (*get_srcport)(struct rpc_xprt *);
+ int (*buf_alloc)(struct rpc_task *);
+ void (*buf_free)(struct rpc_task *);
+ int (*prepare_request)(struct rpc_rqst *, struct xdr_buf *);
+ int (*send_request)(struct rpc_rqst *);
+ void (*abort_send_request)(struct rpc_rqst *);
+ void (*wait_for_reply_request)(struct rpc_task *);
+ void (*timer)(struct rpc_xprt *, struct rpc_task *);
+ void (*release_request)(struct rpc_task *);
+ void (*close)(struct rpc_xprt *);
+ void (*destroy)(struct rpc_xprt *);
+ void (*set_connect_timeout)(struct rpc_xprt *, long unsigned int, long unsigned int);
+ void (*print_stats)(struct rpc_xprt *, struct seq_file *);
+ int (*enable_swap)(struct rpc_xprt *);
+ void (*disable_swap)(struct rpc_xprt *);
+ void (*inject_disconnect)(struct rpc_xprt *);
+ int (*bc_setup)(struct rpc_xprt *, unsigned int);
+ size_t (*bc_maxpayload)(struct rpc_xprt *);
+ unsigned int (*bc_num_slots)(struct rpc_xprt *);
+ void (*bc_free_rqst)(struct rpc_rqst *);
+ void (*bc_destroy)(struct rpc_xprt *, unsigned int);
+};
+
+struct xprt_create;
+
+struct xprt_class {
+ struct list_head list;
+ int ident;
+ struct rpc_xprt * (*setup)(struct xprt_create *);
+ struct module *owner;
+ char name[32];
+ const char *netid[0];
+};
+
+struct xprt_create {
+ int ident;
+ struct net *net;
+ struct sockaddr *srcaddr;
+ struct sockaddr *dstaddr;
+ size_t addrlen;
+ const char *servername;
+ struct svc_xprt *bc_xprt;
+ struct rpc_xprt_switch *bc_xps;
+ unsigned int flags;
+ struct xprtsec_parms xprtsec;
+ long unsigned int connect_timeout;
+ long unsigned int reconnect_timeout;
+};
+
+struct rpc_sysfs_xprt_switch;
+
+struct rpc_xprt_switch {
+ spinlock_t xps_lock;
+ struct kref xps_kref;
+ unsigned int xps_id;
+ unsigned int xps_nxprts;
+ unsigned int xps_nactive;
+ unsigned int xps_nunique_destaddr_xprts;
+ atomic_long_t xps_queuelen;
+ struct list_head xps_xprt_list;
+ struct net *xps_net;
+ const struct rpc_xprt_iter_ops *xps_iter_ops;
+ struct rpc_sysfs_xprt_switch *xps_sysfs;
+ struct callback_head xps_rcu;
+};
+
+struct rpc_stat {
+ const struct rpc_program *program;
+ unsigned int netcnt;
+ unsigned int netudpcnt;
+ unsigned int nettcpcnt;
+ unsigned int nettcpconn;
+ unsigned int netreconn;
+ unsigned int rpccnt;
+ unsigned int rpcretrans;
+ unsigned int rpcauthrefresh;
+ unsigned int rpcgarbage;
+};
+
+struct rpc_version;
+
+struct rpc_program {
+ const char *name;
+ u32 number;
+ unsigned int nrvers;
+ const struct rpc_version **version;
+ struct rpc_stat *stats;
+ const char *pipe_dir_name;
+};
+
+struct rpc_xprt_iter_ops {
+ void (*xpi_rewind)(struct rpc_xprt_iter *);
+ struct rpc_xprt * (*xpi_xprt)(struct rpc_xprt_iter *);
+ struct rpc_xprt * (*xpi_next)(struct rpc_xprt_iter *);
+};
+
+struct rpc_sysfs_client {
+ struct kobject kobject;
+ struct net *net;
+ struct rpc_clnt *clnt;
+ struct rpc_xprt_switch *xprt_switch;
+};
+
+struct rpc_version {
+ u32 number;
+ unsigned int nrprocs;
+ const struct rpc_procinfo *procs;
+ unsigned int *counts;
+};
+
+struct nfs_fh {
+ short unsigned int size;
+ unsigned char data[128];
+};
+
+enum nfs3_stable_how {
+ NFS_UNSTABLE = 0,
+ NFS_DATA_SYNC = 1,
+ NFS_FILE_SYNC = 2,
+ NFS_INVALID_STABLE_HOW = -1,
+};
+
+struct nfs4_label {
+ uint32_t lfs;
+ uint32_t pi;
+ u32 len;
+ char *label;
+};
+
+typedef struct {
+ char data[8];
+} nfs4_verifier;
+
+struct nfs4_stateid_struct {
+ union {
+ char data[16];
+ struct {
+ __be32 seqid;
+ char other[12];
+ };
+ };
+ enum {
+ NFS4_INVALID_STATEID_TYPE = 0,
+ NFS4_SPECIAL_STATEID_TYPE = 1,
+ NFS4_OPEN_STATEID_TYPE = 2,
+ NFS4_LOCK_STATEID_TYPE = 3,
+ NFS4_DELEGATION_STATEID_TYPE = 4,
+ NFS4_LAYOUT_STATEID_TYPE = 5,
+ NFS4_PNFS_DS_STATEID_TYPE = 6,
+ NFS4_REVOKED_STATEID_TYPE = 7,
+ } type;
+};
+
+typedef struct nfs4_stateid_struct nfs4_stateid;
+
+enum nfs_opnum4 {
+ OP_ACCESS = 3,
+ OP_CLOSE = 4,
+ OP_COMMIT = 5,
+ OP_CREATE = 6,
+ OP_DELEGPURGE = 7,
+ OP_DELEGRETURN = 8,
+ OP_GETATTR = 9,
+ OP_GETFH = 10,
+ OP_LINK = 11,
+ OP_LOCK = 12,
+ OP_LOCKT = 13,
+ OP_LOCKU = 14,
+ OP_LOOKUP = 15,
+ OP_LOOKUPP = 16,
+ OP_NVERIFY = 17,
+ OP_OPEN = 18,
+ OP_OPENATTR = 19,
+ OP_OPEN_CONFIRM = 20,
+ OP_OPEN_DOWNGRADE = 21,
+ OP_PUTFH = 22,
+ OP_PUTPUBFH = 23,
+ OP_PUTROOTFH = 24,
+ OP_READ = 25,
+ OP_READDIR = 26,
+ OP_READLINK = 27,
+ OP_REMOVE = 28,
+ OP_RENAME = 29,
+ OP_RENEW = 30,
+ OP_RESTOREFH = 31,
+ OP_SAVEFH = 32,
+ OP_SECINFO = 33,
+ OP_SETATTR = 34,
+ OP_SETCLIENTID = 35,
+ OP_SETCLIENTID_CONFIRM = 36,
+ OP_VERIFY = 37,
+ OP_WRITE = 38,
+ OP_RELEASE_LOCKOWNER = 39,
+ OP_BACKCHANNEL_CTL = 40,
+ OP_BIND_CONN_TO_SESSION = 41,
+ OP_EXCHANGE_ID = 42,
+ OP_CREATE_SESSION = 43,
+ OP_DESTROY_SESSION = 44,
+ OP_FREE_STATEID = 45,
+ OP_GET_DIR_DELEGATION = 46,
+ OP_GETDEVICEINFO = 47,
+ OP_GETDEVICELIST = 48,
+ OP_LAYOUTCOMMIT = 49,
+ OP_LAYOUTGET = 50,
+ OP_LAYOUTRETURN = 51,
+ OP_SECINFO_NO_NAME = 52,
+ OP_SEQUENCE = 53,
+ OP_SET_SSV = 54,
+ OP_TEST_STATEID = 55,
+ OP_WANT_DELEGATION = 56,
+ OP_DESTROY_CLIENTID = 57,
+ OP_RECLAIM_COMPLETE = 58,
+ OP_ALLOCATE = 59,
+ OP_COPY = 60,
+ OP_COPY_NOTIFY = 61,
+ OP_DEALLOCATE = 62,
+ OP_IO_ADVISE = 63,
+ OP_LAYOUTERROR = 64,
+ OP_LAYOUTSTATS = 65,
+ OP_OFFLOAD_CANCEL = 66,
+ OP_OFFLOAD_STATUS = 67,
+ OP_READ_PLUS = 68,
+ OP_SEEK = 69,
+ OP_WRITE_SAME = 70,
+ OP_CLONE = 71,
+ OP_GETXATTR = 72,
+ OP_SETXATTR = 73,
+ OP_LISTXATTRS = 74,
+ OP_REMOVEXATTR = 75,
+ OP_ILLEGAL = 10044,
+};
+
+enum pnfs_iomode {
+ IOMODE_READ = 1,
+ IOMODE_RW = 2,
+ IOMODE_ANY = 3,
+};
+
+struct nfs4_deviceid {
+ char data[16];
+};
+
+enum nfs4_change_attr_type {
+ NFS4_CHANGE_TYPE_IS_MONOTONIC_INCR = 0,
+ NFS4_CHANGE_TYPE_IS_VERSION_COUNTER = 1,
+ NFS4_CHANGE_TYPE_IS_VERSION_COUNTER_NOPNFS = 2,
+ NFS4_CHANGE_TYPE_IS_TIME_METADATA = 3,
+ NFS4_CHANGE_TYPE_IS_UNDEFINED = 4,
+};
+
+struct nfs4_string {
+ unsigned int len;
+ char *data;
+};
+
+struct nfs_fsid {
+ uint64_t major;
+ uint64_t minor;
+};
+
+struct nfs4_threshold {
+ __u32 bm;
+ __u32 l_type;
+ __u64 rd_sz;
+ __u64 wr_sz;
+ __u64 rd_io_sz;
+ __u64 wr_io_sz;
+};
+
+struct nfs_fattr {
+ unsigned int valid;
+ umode_t mode;
+ __u32 nlink;
+ kuid_t uid;
+ kgid_t gid;
+ dev_t rdev;
+ __u64 size;
+ union {
+ struct {
+ __u32 blocksize;
+ __u32 blocks;
+ } nfs2;
+ struct {
+ __u64 used;
+ } nfs3;
+ } du;
+ struct nfs_fsid fsid;
+ __u64 fileid;
+ __u64 mounted_on_fileid;
+ struct timespec64 atime;
+ struct timespec64 mtime;
+ struct timespec64 ctime;
+ __u64 change_attr;
+ __u64 pre_change_attr;
+ __u64 pre_size;
+ struct timespec64 pre_mtime;
+ struct timespec64 pre_ctime;
+ long unsigned int time_start;
+ long unsigned int gencount;
+ struct nfs4_string *owner_name;
+ struct nfs4_string *group_name;
+ struct nfs4_threshold *mdsthreshold;
+ struct nfs4_label *label;
+};
+
+struct nfs_fsinfo {
+ struct nfs_fattr *fattr;
+ __u32 rtmax;
+ __u32 rtpref;
+ __u32 rtmult;
+ __u32 wtmax;
+ __u32 wtpref;
+ __u32 wtmult;
+ __u32 dtpref;
+ __u64 maxfilesize;
+ struct timespec64 time_delta;
+ __u32 lease_time;
+ __u32 nlayouttypes;
+ __u32 layouttype[8];
+ __u32 blksize;
+ __u32 clone_blksize;
+ enum nfs4_change_attr_type change_attr_type;
+ __u32 xattr_support;
+};
+
+struct nfs_fsstat {
+ struct nfs_fattr *fattr;
+ __u64 tbytes;
+ __u64 fbytes;
+ __u64 abytes;
+ __u64 tfiles;
+ __u64 ffiles;
+ __u64 afiles;
+};
+
+struct nfs_pathconf {
+ struct nfs_fattr *fattr;
+ __u32 max_link;
+ __u32 max_namelen;
+};
+
+struct nfs4_change_info {
+ u32 atomic;
+ u64 before;
+ u64 after;
+};
+
+struct nfs4_slot;
+
+struct nfs4_sequence_args {
+ struct nfs4_slot *sa_slot;
+ u8 sa_cache_this: 1;
+ u8 sa_privileged: 1;
+};
+
+struct nfs4_sequence_res {
+ struct nfs4_slot *sr_slot;
+ long unsigned int sr_timestamp;
+ int sr_status;
+ u32 sr_status_flags;
+ u32 sr_highest_slotid;
+ u32 sr_target_highest_slotid;
+};
+
+struct nfs4_xdr_opaque_data;
+
+struct nfs4_xdr_opaque_ops {
+ void (*encode)(struct xdr_stream *, const void *, const struct nfs4_xdr_opaque_data *);
+ void (*free)(struct nfs4_xdr_opaque_data *);
+};
+
+struct nfs4_xdr_opaque_data {
+ const struct nfs4_xdr_opaque_ops *ops;
+ void *data;
+};
+
+struct nfs4_layoutdriver_data {
+ struct page **pages;
+ __u32 pglen;
+ __u32 len;
+};
+
+struct pnfs_layout_range {
+ u32 iomode;
+ u64 offset;
+ u64 length;
+};
+
+struct nfs_open_context;
+
+struct nfs_lock_context {
+ refcount_t count;
+ struct list_head list;
+ struct nfs_open_context *open_context;
+ fl_owner_t lockowner;
+ atomic_t io_count;
+ struct callback_head callback_head;
+};
+
+struct nfs4_state;
+
+struct nfs_open_context {
+ struct nfs_lock_context lock_context;
+ fl_owner_t flock_owner;
+ struct dentry *dentry;
+ const struct cred *cred;
+ struct rpc_cred *ll_cred;
+ struct nfs4_state *state;
+ fmode_t mode;
+ long unsigned int flags;
+ int error;
+ struct list_head list;
+ struct nfs4_threshold *mdsthreshold;
+ struct callback_head callback_head;
+};
+
+struct nfs4_layoutget_res {
+ struct nfs4_sequence_res seq_res;
+ int status;
+ __u32 return_on_close;
+ struct pnfs_layout_range range;
+ __u32 type;
+ nfs4_stateid stateid;
+ struct nfs4_layoutdriver_data *layoutp;
+};
+
+struct pnfs_layout_hdr {
+ refcount_t plh_refcount;
+ atomic_t plh_outstanding;
+ struct list_head plh_layouts;
+ struct list_head plh_bulk_destroy;
+ struct list_head plh_segs;
+ struct list_head plh_return_segs;
+ long unsigned int plh_block_lgets;
+ long unsigned int plh_retry_timestamp;
+ long unsigned int plh_flags;
+ nfs4_stateid plh_stateid;
+ u32 plh_barrier;
+ u32 plh_return_seq;
+ enum pnfs_iomode plh_return_iomode;
+ loff_t plh_lwb;
+ const struct cred *plh_lc_cred;
+ struct inode *plh_inode;
+ struct callback_head plh_rcu;
+};
+
+struct pnfs_device {
+ struct nfs4_deviceid dev_id;
+ unsigned int layout_type;
+ unsigned int mincount;
+ unsigned int maxcount;
+ struct page **pages;
+ unsigned int pgbase;
+ unsigned int pglen;
+ unsigned char nocache: 1;
+};
+
+struct nfs4_layoutcommit_args {
+ struct nfs4_sequence_args seq_args;
+ nfs4_stateid stateid;
+ __u64 lastbytewritten;
+ struct inode *inode;
+ const u32 *bitmask;
+ size_t layoutupdate_len;
+ struct page *layoutupdate_page;
+ struct page **layoutupdate_pages;
+ __be32 *start_p;
+};
+
+struct nfs_server;
+
+struct nfs4_layoutcommit_res {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_fattr *fattr;
+ const struct nfs_server *server;
+ int status;
+};
+
+struct nfs_auth_info {
+ unsigned int flavor_len;
+ rpc_authflavor_t flavors[12];
+};
+
+struct nfs_client;
+
+struct nlm_host;
+
+struct nfs_iostats;
+
+struct pnfs_layoutdriver_type;
+
+struct nfs_server {
+ struct nfs_client *nfs_client;
+ struct list_head client_link;
+ struct list_head master_link;
+ struct rpc_clnt *client;
+ struct rpc_clnt *client_acl;
+ struct nlm_host *nlm_host;
+ struct nfs_iostats *io_stats;
+ wait_queue_head_t write_congestion_wait;
+ atomic_long_t writeback;
+ unsigned int write_congested;
+ unsigned int flags;
+ unsigned int fattr_valid;
+ unsigned int caps;
+ unsigned int rsize;
+ unsigned int rpages;
+ unsigned int wsize;
+ unsigned int wpages;
+ unsigned int wtmult;
+ unsigned int dtsize;
+ short unsigned int port;
+ unsigned int bsize;
+ unsigned int gxasize;
+ unsigned int sxasize;
+ unsigned int lxasize;
+ unsigned int acregmin;
+ unsigned int acregmax;
+ unsigned int acdirmin;
+ unsigned int acdirmax;
+ unsigned int namelen;
+ unsigned int options;
+ unsigned int clone_blksize;
+ enum nfs4_change_attr_type change_attr_type;
+ struct nfs_fsid fsid;
+ int s_sysfs_id;
+ __u64 maxfilesize;
+ struct timespec64 time_delta;
+ long unsigned int mount_time;
+ struct super_block *super;
+ dev_t s_dev;
+ struct nfs_auth_info auth_info;
+ u32 pnfs_blksize;
+ u32 attr_bitmask[3];
+ u32 attr_bitmask_nl[3];
+ u32 exclcreat_bitmask[3];
+ u32 cache_consistency_bitmask[3];
+ u32 acl_bitmask;
+ u32 fh_expire_type;
+ struct pnfs_layoutdriver_type *pnfs_curr_ld;
+ struct rpc_wait_queue roc_rpcwaitq;
+ void *pnfs_ld_data;
+ struct rb_root state_owners;
+ atomic64_t owner_ctr;
+ struct list_head state_owners_lru;
+ struct list_head layouts;
+ struct list_head delegations;
+ struct list_head ss_copies;
+ struct list_head ss_src_copies;
+ long unsigned int delegation_gen;
+ long unsigned int mig_gen;
+ long unsigned int mig_status;
+ void (*destroy)(struct nfs_server *);
+ atomic_t active;
+ struct __kernel_sockaddr_storage mountd_address;
+ size_t mountd_addrlen;
+ u32 mountd_version;
+ short unsigned int mountd_port;
+ short unsigned int mountd_protocol;
+ struct rpc_wait_queue uoc_rpcwaitq;
+ unsigned int read_hdrsize;
+ const struct cred *cred;
+ bool has_sec_mnt_opts;
+ struct kobject kobj;
+ struct callback_head rcu;
+};
+
+struct nfs4_layoutcommit_data {
+ struct rpc_task task;
+ struct nfs_fattr fattr;
+ struct list_head lseg_list;
+ const struct cred *cred;
+ struct inode *inode;
+ struct nfs4_layoutcommit_args args;
+ struct nfs4_layoutcommit_res res;
+};
+
+struct nfs4_layoutreturn_args {
+ struct nfs4_sequence_args seq_args;
+ struct pnfs_layout_hdr *layout;
+ struct inode *inode;
+ struct pnfs_layout_range range;
+ nfs4_stateid stateid;
+ __u32 layout_type;
+ struct nfs4_xdr_opaque_data *ld_private;
+};
+
+struct nfs_rpc_ops;
+
+struct nfs_subversion;
+
+struct idmap;
+
+struct nfs4_minor_version_ops;
+
+struct nfs4_slot_table;
+
+struct nfs4_session;
+
+struct nfs41_server_owner;
+
+struct nfs41_server_scope;
+
+struct nfs41_impl_id;
+
+struct nfs_client {
+ refcount_t cl_count;
+ atomic_t cl_mds_count;
+ int cl_cons_state;
+ long unsigned int cl_res_state;
+ long unsigned int cl_flags;
+ struct __kernel_sockaddr_storage cl_addr;
+ size_t cl_addrlen;
+ char *cl_hostname;
+ char *cl_acceptor;
+ struct list_head cl_share_link;
+ struct list_head cl_superblocks;
+ struct rpc_clnt *cl_rpcclient;
+ const struct nfs_rpc_ops *rpc_ops;
+ int cl_proto;
+ struct nfs_subversion *cl_nfs_mod;
+ u32 cl_minorversion;
+ unsigned int cl_nconnect;
+ unsigned int cl_max_connect;
+ const char *cl_principal;
+ struct xprtsec_parms cl_xprtsec;
+ struct list_head cl_ds_clients;
+ u64 cl_clientid;
+ nfs4_verifier cl_confirm;
+ long unsigned int cl_state;
+ spinlock_t cl_lock;
+ long unsigned int cl_lease_time;
+ long unsigned int cl_last_renewal;
+ struct delayed_work cl_renewd;
+ struct rpc_wait_queue cl_rpcwaitq;
+ struct idmap *cl_idmap;
+ const char *cl_owner_id;
+ u32 cl_cb_ident;
+ const struct nfs4_minor_version_ops *cl_mvops;
+ long unsigned int cl_mig_gen;
+ struct nfs4_slot_table *cl_slot_tbl;
+ u32 cl_seqid;
+ u32 cl_exchange_flags;
+ struct nfs4_session *cl_session;
+ bool cl_preserve_clid;
+ struct nfs41_server_owner *cl_serverowner;
+ struct nfs41_server_scope *cl_serverscope;
+ struct nfs41_impl_id *cl_implid;
+ long unsigned int cl_sp4_flags;
+ wait_queue_head_t cl_lock_waitq;
+ char cl_ipaddr[48];
+ struct net *cl_net;
+ struct list_head pending_cb_stateids;
+ struct callback_head rcu;
+};
+
+struct nfs42_layoutstat_devinfo;
+
+struct nfs42_layoutstat_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ struct inode *inode;
+ nfs4_stateid stateid;
+ int num_dev;
+ struct nfs42_layoutstat_devinfo *devinfo;
+};
+
+struct nfs42_layoutstat_devinfo {
+ struct nfs4_deviceid dev_id;
+ __u64 offset;
+ __u64 length;
+ __u64 read_count;
+ __u64 read_bytes;
+ __u64 write_count;
+ __u64 write_bytes;
+ __u32 layout_type;
+ struct nfs4_xdr_opaque_data ld_private;
+};
+
+struct pnfs_layout_segment {
+ struct list_head pls_list;
+ struct list_head pls_lc_list;
+ struct list_head pls_commits;
+ struct pnfs_layout_range pls_range;
+ refcount_t pls_refcount;
+ u32 pls_seq;
+ long unsigned int pls_flags;
+ struct pnfs_layout_hdr *pls_layout;
+};
+
+struct nfs_seqid_counter;
+
+struct nfs_seqid {
+ struct nfs_seqid_counter *sequence;
+ struct list_head list;
+ struct rpc_task *task;
+};
+
+struct nfs_write_verifier {
+ char data[8];
+};
+
+struct nfs_writeverf {
+ struct nfs_write_verifier verifier;
+ enum nfs3_stable_how committed;
+};
+
+struct nfs_pgio_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ struct nfs_open_context *context;
+ struct nfs_lock_context *lock_context;
+ nfs4_stateid stateid;
+ __u64 offset;
+ __u32 count;
+ unsigned int pgbase;
+ struct page **pages;
+ union {
+ unsigned int replen;
+ struct {
+ const u32 *bitmask;
+ u32 bitmask_store[3];
+ enum nfs3_stable_how stable;
+ };
+ };
+};
+
+struct nfs_pgio_res {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_fattr *fattr;
+ __u64 count;
+ __u32 op_status;
+ union {
+ struct {
+ unsigned int replen;
+ int eof;
+ void *scratch;
+ };
+ struct {
+ struct nfs_writeverf *verf;
+ const struct nfs_server *server;
+ };
+ };
+};
+
+struct nfs_commitargs {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ __u64 offset;
+ __u32 count;
+ const u32 *bitmask;
+};
+
+struct nfs_commitres {
+ struct nfs4_sequence_res seq_res;
+ __u32 op_status;
+ struct nfs_fattr *fattr;
+ struct nfs_writeverf *verf;
+ const struct nfs_server *server;
+};
+
+struct nfs_removeargs {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ struct qstr name;
+};
+
+struct nfs_removeres {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_server *server;
+ struct nfs_fattr *dir_attr;
+ struct nfs4_change_info cinfo;
+};
+
+struct nfs_renameargs {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *old_dir;
+ const struct nfs_fh *new_dir;
+ const struct qstr *old_name;
+ const struct qstr *new_name;
+};
+
+struct nfs_renameres {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_server *server;
+ struct nfs4_change_info old_cinfo;
+ struct nfs_fattr *old_fattr;
+ struct nfs4_change_info new_cinfo;
+ struct nfs_fattr *new_fattr;
+};
+
+struct nfs_entry {
+ __u64 ino;
+ __u64 cookie;
+ const char *name;
+ unsigned int len;
+ int eof;
+ struct nfs_fh *fh;
+ struct nfs_fattr *fattr;
+ unsigned char d_type;
+ struct nfs_server *server;
+};
+
+struct nfs_readdir_arg {
+ struct dentry *dentry;
+ const struct cred *cred;
+ __be32 *verf;
+ u64 cookie;
+ struct page **pages;
+ unsigned int page_len;
+ bool plus;
+};
+
+struct nfs_readdir_res {
+ __be32 *verf;
+};
+
+struct nfs4_pathname {
+ unsigned int ncomponents;
+ struct nfs4_string components[512];
+};
+
+struct nfs4_fs_location {
+ unsigned int nservers;
+ struct nfs4_string servers[10];
+ struct nfs4_pathname rootpath;
+};
+
+struct nfs4_fs_locations {
+ struct nfs_fattr *fattr;
+ const struct nfs_server *server;
+ struct nfs4_pathname fs_path;
+ int nlocations;
+ struct nfs4_fs_location locations[10];
+};
+
+struct nfstime4 {
+ u64 seconds;
+ u32 nseconds;
+};
+
+struct pnfs_commit_bucket {
+ struct list_head written;
+ struct list_head committing;
+ struct pnfs_layout_segment *lseg;
+ struct nfs_writeverf direct_verf;
+};
+
+struct pnfs_commit_array {
+ struct list_head cinfo_list;
+ struct list_head lseg_list;
+ struct pnfs_layout_segment *lseg;
+ struct callback_head rcu;
+ refcount_t refcount;
+ unsigned int nbuckets;
+ struct pnfs_commit_bucket buckets[0];
+};
+
+struct pnfs_commit_ops;
+
+struct pnfs_ds_commit_info {
+ struct list_head commits;
+ unsigned int nwritten;
+ unsigned int ncommitting;
+ const struct pnfs_commit_ops *ops;
+};
+
+struct nfs_commit_info;
+
+struct nfs_page;
+
+struct pnfs_commit_ops {
+ void (*setup_ds_info)(struct pnfs_ds_commit_info *, struct pnfs_layout_segment *);
+ void (*release_ds_info)(struct pnfs_ds_commit_info *, struct inode *);
+ int (*commit_pagelist)(struct inode *, struct list_head *, int, struct nfs_commit_info *);
+ void (*mark_request_commit)(struct nfs_page *, struct pnfs_layout_segment *, struct nfs_commit_info *, u32);
+ void (*clear_request_commit)(struct nfs_page *, struct nfs_commit_info *);
+ int (*scan_commit_lists)(struct nfs_commit_info *, int);
+ void (*recover_commit_reqs)(struct list_head *, struct nfs_commit_info *);
+};
+
+struct nfs41_server_owner {
+ uint64_t minor_id;
+ uint32_t major_id_sz;
+ char major_id[1024];
+};
+
+struct nfs41_server_scope {
+ uint32_t server_scope_sz;
+ char server_scope[1024];
+};
+
+struct nfs41_impl_id {
+ char domain[1025];
+ char name[1025];
+ struct nfstime4 date;
+};
+
+struct nfs_page_array {
+ struct page **pagevec;
+ unsigned int npages;
+ struct page *page_array[8];
+};
+
+enum {
+ NFS_IOHDR_ERROR = 0,
+ NFS_IOHDR_EOF = 1,
+ NFS_IOHDR_REDO = 2,
+ NFS_IOHDR_STAT = 3,
+ NFS_IOHDR_RESEND_PNFS = 4,
+ NFS_IOHDR_RESEND_MDS = 5,
+ NFS_IOHDR_UNSTABLE_WRITES = 6,
+};
+
+struct nfs_pgio_completion_ops;
+
+struct nfs_rw_ops;
+
+struct nfs_io_completion;
+
+struct nfs_direct_req;
+
+struct nfs_pgio_header {
+ struct inode *inode;
+ const struct cred *cred;
+ struct list_head pages;
+ struct nfs_page *req;
+ struct nfs_writeverf verf;
+ fmode_t rw_mode;
+ struct pnfs_layout_segment *lseg;
+ loff_t io_start;
+ const struct rpc_call_ops *mds_ops;
+ void (*release)(struct nfs_pgio_header *);
+ const struct nfs_pgio_completion_ops *completion_ops;
+ const struct nfs_rw_ops *rw_ops;
+ struct nfs_io_completion *io_completion;
+ struct nfs_direct_req *dreq;
+ int pnfs_error;
+ int error;
+ unsigned int good_bytes;
+ long unsigned int flags;
+ struct rpc_task task;
+ struct nfs_fattr fattr;
+ struct nfs_pgio_args args;
+ struct nfs_pgio_res res;
+ long unsigned int timestamp;
+ int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *);
+ __u64 mds_offset;
+ struct nfs_page_array page_array;
+ struct nfs_client *ds_clp;
+ u32 ds_commit_idx;
+ u32 pgio_mirror_idx;
+};
+
+struct nfs_page {
+ struct list_head wb_list;
+ union {
+ struct page *wb_page;
+ struct folio *wb_folio;
+ };
+ struct nfs_lock_context *wb_lock_context;
+ long unsigned int wb_index;
+ unsigned int wb_offset;
+ unsigned int wb_pgbase;
+ unsigned int wb_bytes;
+ struct kref wb_kref;
+ long unsigned int wb_flags;
+ struct nfs_write_verifier wb_verf;
+ struct nfs_page *wb_this_page;
+ struct nfs_page *wb_head;
+ short unsigned int wb_nio;
+};
+
+struct nfs_pgio_completion_ops {
+ void (*error_cleanup)(struct list_head *, int);
+ void (*init_hdr)(struct nfs_pgio_header *);
+ void (*completion)(struct nfs_pgio_header *);
+ void (*reschedule_io)(struct nfs_pgio_header *);
+};
+
+struct nfs_rw_ops {
+ struct nfs_pgio_header * (*rw_alloc_header)();
+ void (*rw_free_header)(struct nfs_pgio_header *);
+ int (*rw_done)(struct rpc_task *, struct nfs_pgio_header *, struct inode *);
+ void (*rw_result)(struct rpc_task *, struct nfs_pgio_header *);
+ void (*rw_initiate)(struct nfs_pgio_header *, struct rpc_message *, const struct nfs_rpc_ops *, struct rpc_task_setup *, int);
+};
+
+struct nfs_mds_commit_info {
+ atomic_t rpcs_out;
+ atomic_long_t ncommit;
+ struct list_head list;
+};
+
+struct nfs_direct_req {
+ struct kref kref;
+ struct nfs_open_context *ctx;
+ struct nfs_lock_context *l_ctx;
+ struct kiocb *iocb;
+ struct inode *inode;
+ atomic_t io_count;
+ spinlock_t lock;
+ loff_t io_start;
+ ssize_t count;
+ ssize_t max_count;
+ ssize_t error;
+ struct completion completion;
+ struct nfs_mds_commit_info mds_cinfo;
+ struct pnfs_ds_commit_info ds_cinfo;
+ struct work_struct work;
+ int flags;
+};
+
+struct nfs_commit_data;
+
+struct nfs_commit_completion_ops {
+ void (*completion)(struct nfs_commit_data *);
+ void (*resched_write)(struct nfs_commit_info *, struct nfs_page *);
+};
+
+struct nfs_commit_data {
+ struct rpc_task task;
+ struct inode *inode;
+ const struct cred *cred;
+ struct nfs_fattr fattr;
+ struct nfs_writeverf verf;
+ struct list_head pages;
+ struct list_head list;
+ struct nfs_direct_req *dreq;
+ struct nfs_commitargs args;
+ struct nfs_commitres res;
+ struct nfs_open_context *context;
+ struct pnfs_layout_segment *lseg;
+ struct nfs_client *ds_clp;
+ int ds_commit_index;
+ loff_t lwb;
+ const struct rpc_call_ops *mds_ops;
+ const struct nfs_commit_completion_ops *completion_ops;
+ int (*commit_done_cb)(struct rpc_task *, struct nfs_commit_data *);
+ long unsigned int flags;
+};
+
+struct nfs_commit_info {
+ struct inode *inode;
+ struct nfs_mds_commit_info *mds;
+ struct pnfs_ds_commit_info *ds;
+ struct nfs_direct_req *dreq;
+ const struct nfs_commit_completion_ops *completion_ops;
+};
+
+struct nfs_unlinkdata {
+ struct nfs_removeargs args;
+ struct nfs_removeres res;
+ struct dentry *dentry;
+ wait_queue_head_t wq;
+ const struct cred *cred;
+ struct nfs_fattr dir_attr;
+ long int timeout;
+};
+
+struct nfs_renamedata {
+ struct nfs_renameargs args;
+ struct nfs_renameres res;
+ struct rpc_task task;
+ const struct cred *cred;
+ struct inode *old_dir;
+ struct dentry *old_dentry;
+ struct nfs_fattr old_fattr;
+ struct inode *new_dir;
+ struct dentry *new_dentry;
+ struct nfs_fattr new_fattr;
+ void (*complete)(struct rpc_task *, struct nfs_renamedata *);
+ long int timeout;
+ bool cancelled;
+};
+
+struct nlmclnt_operations;
+
+struct nfs_access_entry;
+
+struct nfs_client_initdata;
+
+struct nfs_rpc_ops {
+ u32 version;
+ const struct dentry_operations *dentry_ops;
+ const struct inode_operations *dir_inode_ops;
+ const struct inode_operations *file_inode_ops;
+ const struct file_operations *file_ops;
+ const struct nlmclnt_operations *nlmclnt_ops;
+ int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+ int (*submount)(struct fs_context *, struct nfs_server *);
+ int (*try_get_tree)(struct fs_context *);
+ int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
+ int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
+ int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
+ int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
+ int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
+ int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
+ int (*create)(struct inode *, struct dentry *, struct iattr *, int);
+ int (*remove)(struct inode *, struct dentry *);
+ void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
+ void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
+ int (*unlink_done)(struct rpc_task *, struct inode *);
+ void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
+ void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
+ int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
+ int (*link)(struct inode *, struct inode *, const struct qstr *);
+ int (*symlink)(struct inode *, struct dentry *, struct folio *, unsigned int, struct iattr *);
+ int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
+ int (*rmdir)(struct inode *, const struct qstr *);
+ int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
+ int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
+ int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
+ int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+ int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
+ int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
+ int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
+ int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
+ void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
+ int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
+ void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
+ int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
+ void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
+ void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
+ int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
+ int (*lock)(struct file *, int, struct file_lock *);
+ int (*lock_check_bounds)(const struct file_lock *);
+ void (*clear_acl_cache)(struct inode *);
+ void (*close_context)(struct nfs_open_context *, int);
+ struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
+ int (*have_delegation)(struct inode *, fmode_t, int);
+ int (*return_delegation)(struct inode *);
+ struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
+ struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
+ void (*free_client)(struct nfs_client *);
+ struct nfs_server * (*create_server)(struct fs_context *);
+ struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
+ int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
+ void (*enable_swap)(struct inode *);
+ void (*disable_swap)(struct inode *);
+};
+
+struct nlmclnt_operations {
+ void (*nlmclnt_alloc_call)(void *);
+ bool (*nlmclnt_unlock_prepare)(struct rpc_task *, void *);
+ void (*nlmclnt_release_call)(void *);
+};
+
+struct nfs_access_entry {
+ struct rb_node rb_node;
+ struct list_head lru;
+ kuid_t fsuid;
+ kgid_t fsgid;
+ struct group_info *group_info;
+ u64 timestamp;
+ __u32 mask;
+ struct callback_head callback_head;
+};
+
+struct nfs_client_initdata {
+ long unsigned int init_flags;
+ const char *hostname;
+ const struct __kernel_sockaddr_storage *addr;
+ const char *nodename;
+ const char *ip_addr;
+ size_t addrlen;
+ struct nfs_subversion *nfs_mod;
+ int proto;
+ u32 minorversion;
+ unsigned int nconnect;
+ unsigned int max_connect;
+ struct net *net;
+ const struct rpc_timeout *timeparms;
+ const struct cred *cred;
+ struct xprtsec_parms xprtsec;
+ long unsigned int connect_timeout;
+ long unsigned int reconnect_timeout;
+};
+
+struct nfs4_state_recovery_ops;
+
+struct nfs4_state_maintenance_ops;
+
+struct nfs4_mig_recovery_ops;
+
+struct nfs4_minor_version_ops {
+ u32 minor_version;
+ unsigned int init_caps;
+ int (*init_client)(struct nfs_client *);
+ void (*shutdown_client)(struct nfs_client *);
+ bool (*match_stateid)(const nfs4_stateid *, const nfs4_stateid *);
+ int (*find_root_sec)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+ void (*free_lock_state)(struct nfs_server *, struct nfs4_lock_state *);
+ int (*test_and_free_expired)(struct nfs_server *, const nfs4_stateid *, const struct cred *);
+ struct nfs_seqid * (*alloc_seqid)(struct nfs_seqid_counter *, gfp_t);
+ void (*session_trunk)(struct rpc_clnt *, struct rpc_xprt *, void *);
+ const struct rpc_call_ops *call_sync_ops;
+ const struct nfs4_state_recovery_ops *reboot_recovery_ops;
+ const struct nfs4_state_recovery_ops *nograce_recovery_ops;
+ const struct nfs4_state_maintenance_ops *state_renewal_ops;
+ const struct nfs4_mig_recovery_ops *mig_recovery_ops;
+};
+
+struct nfs_iostats {
+ long long unsigned int bytes[8];
+ long unsigned int events[27];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+enum pnfs_try_status {
+ PNFS_ATTEMPTED = 0,
+ PNFS_NOT_ATTEMPTED = 1,
+ PNFS_TRY_AGAIN = 2,
+};
+
+struct nfs_pageio_ops;
+
+struct nfs4_deviceid_node;
+
+struct pnfs_layoutdriver_type {
+ struct list_head pnfs_tblid;
+ const u32 id;
+ const char *name;
+ struct module *owner;
+ unsigned int flags;
+ unsigned int max_layoutget_response;
+ int (*set_layoutdriver)(struct nfs_server *, const struct nfs_fh *);
+ int (*clear_layoutdriver)(struct nfs_server *);
+ struct pnfs_layout_hdr * (*alloc_layout_hdr)(struct inode *, gfp_t);
+ void (*free_layout_hdr)(struct pnfs_layout_hdr *);
+ struct pnfs_layout_segment * (*alloc_lseg)(struct pnfs_layout_hdr *, struct nfs4_layoutget_res *, gfp_t);
+ void (*free_lseg)(struct pnfs_layout_segment *);
+ void (*add_lseg)(struct pnfs_layout_hdr *, struct pnfs_layout_segment *, struct list_head *);
+ void (*return_range)(struct pnfs_layout_hdr *, struct pnfs_layout_range *);
+ const struct nfs_pageio_ops *pg_read_ops;
+ const struct nfs_pageio_ops *pg_write_ops;
+ struct pnfs_ds_commit_info * (*get_ds_info)(struct inode *);
+ int (*sync)(struct inode *, bool);
+ enum pnfs_try_status (*read_pagelist)(struct nfs_pgio_header *);
+ enum pnfs_try_status (*write_pagelist)(struct nfs_pgio_header *, int);
+ void (*free_deviceid_node)(struct nfs4_deviceid_node *);
+ struct nfs4_deviceid_node * (*alloc_deviceid_node)(struct nfs_server *, struct pnfs_device *, gfp_t);
+ int (*prepare_layoutreturn)(struct nfs4_layoutreturn_args *);
+ void (*cleanup_layoutcommit)(struct nfs4_layoutcommit_data *);
+ int (*prepare_layoutcommit)(struct nfs4_layoutcommit_args *);
+ int (*prepare_layoutstats)(struct nfs42_layoutstat_args *);
+ void (*cancel_io)(struct pnfs_layout_segment *);
+};
+
+struct nfs4_state_owner;
+
+struct nfs4_state {
+ struct list_head open_states;
+ struct list_head inode_states;
+ struct list_head lock_states;
+ struct nfs4_state_owner *owner;
+ struct inode *inode;
+ long unsigned int flags;
+ spinlock_t state_lock;
+ seqlock_t seqlock;
+ nfs4_stateid stateid;
+ nfs4_stateid open_stateid;
+ unsigned int n_rdonly;
+ unsigned int n_wronly;
+ unsigned int n_rdwr;
+ fmode_t state;
+ refcount_t count;
+ wait_queue_head_t waitq;
+ struct callback_head callback_head;
+};
+
+struct nfs4_cached_acl;
+
+struct nfs_delegation;
+
+struct nfs4_xattr_cache;
+
+struct nfs_inode {
+ __u64 fileid;
+ struct nfs_fh fh;
+ long unsigned int flags;
+ long unsigned int cache_validity;
+ long unsigned int read_cache_jiffies;
+ long unsigned int attrtimeo;
+ long unsigned int attrtimeo_timestamp;
+ long unsigned int attr_gencount;
+ struct rb_root access_cache;
+ struct list_head access_cache_entry_lru;
+ struct list_head access_cache_inode_lru;
+ union {
+ struct {
+ long unsigned int cache_change_attribute;
+ __be32 cookieverf[2];
+ struct rw_semaphore rmdir_sem;
+ };
+ struct {
+ atomic_long_t nrequests;
+ atomic_long_t redirtied_pages;
+ struct nfs_mds_commit_info commit_info;
+ struct mutex commit_mutex;
+ };
+ };
+ struct list_head open_files;
+ struct {
+ int cnt;
+ struct {
+ u64 start;
+ u64 end;
+ } gap[16];
+ } *ooo;
+ struct nfs4_cached_acl *nfs4_acl;
+ struct list_head open_states;
+ struct nfs_delegation *delegation;
+ struct rw_semaphore rwsem;
+ struct pnfs_layout_hdr *layout;
+ __u64 write_io;
+ __u64 read_io;
+ struct nfs4_xattr_cache *xattr_cache;
+ union {
+ struct inode vfs_inode;
+ };
+};
+
+enum {
+ PG_BUSY = 0,
+ PG_MAPPED = 1,
+ PG_FOLIO = 2,
+ PG_CLEAN = 3,
+ PG_COMMIT_TO_DS = 4,
+ PG_INODE_REF = 5,
+ PG_HEADLOCK = 6,
+ PG_TEARDOWN = 7,
+ PG_UNLOCKPAGE = 8,
+ PG_UPTODATE = 9,
+ PG_WB_END = 10,
+ PG_REMOVE = 11,
+ PG_CONTENDED1 = 12,
+ PG_CONTENDED2 = 13,
+};
+
+struct nfs_pageio_descriptor;
+
+struct nfs_pgio_mirror;
+
+struct nfs_pageio_ops {
+ void (*pg_init)(struct nfs_pageio_descriptor *, struct nfs_page *);
+ size_t (*pg_test)(struct nfs_pageio_descriptor *, struct nfs_page *, struct nfs_page *);
+ int (*pg_doio)(struct nfs_pageio_descriptor *);
+ unsigned int (*pg_get_mirror_count)(struct nfs_pageio_descriptor *, struct nfs_page *);
+ void (*pg_cleanup)(struct nfs_pageio_descriptor *);
+ struct nfs_pgio_mirror * (*pg_get_mirror)(struct nfs_pageio_descriptor *, u32);
+ u32 (*pg_set_mirror)(struct nfs_pageio_descriptor *, u32);
+};
+
+struct nfs_pgio_mirror {
+ struct list_head pg_list;
+ long unsigned int pg_bytes_written;
+ size_t pg_count;
+ size_t pg_bsize;
+ unsigned int pg_base;
+ unsigned char pg_recoalesce: 1;
+};
+
+struct nfs_pageio_descriptor {
+ struct inode *pg_inode;
+ const struct nfs_pageio_ops *pg_ops;
+ const struct nfs_rw_ops *pg_rw_ops;
+ int pg_ioflags;
+ int pg_error;
+ const struct rpc_call_ops *pg_rpc_callops;
+ const struct nfs_pgio_completion_ops *pg_completion_ops;
+ struct pnfs_layout_segment *pg_lseg;
+ struct nfs_io_completion *pg_io_completion;
+ struct nfs_direct_req *pg_dreq;
+ unsigned int pg_bsize;
+ u32 pg_mirror_count;
+ struct nfs_pgio_mirror *pg_mirrors;
+ struct nfs_pgio_mirror pg_mirrors_static[1];
+ struct nfs_pgio_mirror *pg_mirrors_dynamic;
+ u32 pg_mirror_idx;
+ short unsigned int pg_maxretrans;
+ unsigned char pg_moreio: 1;
+};
+
+struct nfs_seqid_counter {
+ ktime_t create_time;
+ u64 owner_id;
+ int flags;
+ u32 counter;
+ spinlock_t lock;
+ struct list_head list;
+ struct rpc_wait_queue wait;
+};
+
+struct nfs4_lock_state {
+ struct list_head ls_locks;
+ struct nfs4_state *ls_state;
+ long unsigned int ls_flags;
+ struct nfs_seqid_counter ls_seqid;
+ nfs4_stateid ls_stateid;
+ refcount_t ls_count;
+ fl_owner_t ls_owner;
+};
+
+struct nfs4_state_recovery_ops {
+ int owner_flag_bit;
+ int state_flag_bit;
+ int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *);
+ int (*recover_lock)(struct nfs4_state *, struct file_lock *);
+ int (*establish_clid)(struct nfs_client *, const struct cred *);
+ int (*reclaim_complete)(struct nfs_client *, const struct cred *);
+ int (*detect_trunking)(struct nfs_client *, struct nfs_client **, const struct cred *);
+};
+
+struct nfs4_state_maintenance_ops {
+ int (*sched_state_renewal)(struct nfs_client *, const struct cred *, unsigned int);
+ const struct cred * (*get_state_renewal_cred)(struct nfs_client *);
+ int (*renew_lease)(struct nfs_client *, const struct cred *);
+};
+
+struct nfs4_mig_recovery_ops {
+ int (*get_locations)(struct nfs_server *, struct nfs_fh *, struct nfs4_fs_locations *, struct page *, const struct cred *);
+ int (*fsid_present)(struct inode *, const struct cred *);
+};
+
+struct nfs4_state_owner {
+ struct nfs_server *so_server;
+ struct list_head so_lru;
+ long unsigned int so_expires;
+ struct rb_node so_server_node;
+ const struct cred *so_cred;
+ spinlock_t so_lock;
+ atomic_t so_count;
+ long unsigned int so_flags;
+ struct list_head so_states;
+ struct nfs_seqid_counter so_seqid;
+ struct mutex so_delegreturn_mutex;
+};
+
+enum nfs_stat_bytecounters {
+ NFSIOS_NORMALREADBYTES = 0,
+ NFSIOS_NORMALWRITTENBYTES = 1,
+ NFSIOS_DIRECTREADBYTES = 2,
+ NFSIOS_DIRECTWRITTENBYTES = 3,
+ NFSIOS_SERVERREADBYTES = 4,
+ NFSIOS_SERVERWRITTENBYTES = 5,
+ NFSIOS_READPAGES = 6,
+ NFSIOS_WRITEPAGES = 7,
+ __NFSIOS_BYTESMAX = 8,
+};
+
+enum nfs_stat_eventcounters {
+ NFSIOS_INODEREVALIDATE = 0,
+ NFSIOS_DENTRYREVALIDATE = 1,
+ NFSIOS_DATAINVALIDATE = 2,
+ NFSIOS_ATTRINVALIDATE = 3,
+ NFSIOS_VFSOPEN = 4,
+ NFSIOS_VFSLOOKUP = 5,
+ NFSIOS_VFSACCESS = 6,
+ NFSIOS_VFSUPDATEPAGE = 7,
+ NFSIOS_VFSREADPAGE = 8,
+ NFSIOS_VFSREADPAGES = 9,
+ NFSIOS_VFSWRITEPAGE = 10,
+ NFSIOS_VFSWRITEPAGES = 11,
+ NFSIOS_VFSGETDENTS = 12,
+ NFSIOS_VFSSETATTR = 13,
+ NFSIOS_VFSFLUSH = 14,
+ NFSIOS_VFSFSYNC = 15,
+ NFSIOS_VFSLOCK = 16,
+ NFSIOS_VFSRELEASE = 17,
+ NFSIOS_CONGESTIONWAIT = 18,
+ NFSIOS_SETATTRTRUNC = 19,
+ NFSIOS_EXTENDWRITE = 20,
+ NFSIOS_SILLYRENAME = 21,
+ NFSIOS_SHORTREAD = 22,
+ NFSIOS_SHORTWRITE = 23,
+ NFSIOS_DELAY = 24,
+ NFSIOS_PNFS_READ = 25,
+ NFSIOS_PNFS_WRITE = 26,
+ __NFSIOS_COUNTSMAX = 27,
+};
+
+struct nfs4_deviceid_node {
+ struct hlist_node node;
+ struct hlist_node tmpnode;
+ const struct pnfs_layoutdriver_type *ld;
+ const struct nfs_client *nfs_client;
+ long unsigned int flags;
+ long unsigned int timestamp_unavailable;
+ struct nfs4_deviceid deviceid;
+ struct callback_head rcu;
+ atomic_t ref;
+};
+
+struct nfs_subversion {
+ struct module *owner;
+ struct file_system_type *nfs_fs;
+ const struct rpc_version *rpc_vers;
+ const struct nfs_rpc_ops *rpc_ops;
+ const struct super_operations *sops;
+ const struct xattr_handler * const *xattr;
+ struct list_head list;
+};
+
+enum nfs4_client_state {
+ NFS4CLNT_MANAGER_RUNNING = 0,
+ NFS4CLNT_CHECK_LEASE = 1,
+ NFS4CLNT_LEASE_EXPIRED = 2,
+ NFS4CLNT_RECLAIM_REBOOT = 3,
+ NFS4CLNT_RECLAIM_NOGRACE = 4,
+ NFS4CLNT_DELEGRETURN = 5,
+ NFS4CLNT_SESSION_RESET = 6,
+ NFS4CLNT_LEASE_CONFIRM = 7,
+ NFS4CLNT_SERVER_SCOPE_MISMATCH = 8,
+ NFS4CLNT_PURGE_STATE = 9,
+ NFS4CLNT_BIND_CONN_TO_SESSION = 10,
+ NFS4CLNT_MOVED = 11,
+ NFS4CLNT_LEASE_MOVED = 12,
+ NFS4CLNT_DELEGATION_EXPIRED = 13,
+ NFS4CLNT_RUN_MANAGER = 14,
+ NFS4CLNT_MANAGER_AVAILABLE = 15,
+ NFS4CLNT_RECALL_RUNNING = 16,
+ NFS4CLNT_RECALL_ANY_LAYOUT_READ = 17,
+ NFS4CLNT_RECALL_ANY_LAYOUT_RW = 18,
+ NFS4CLNT_DELEGRETURN_DELAYED = 19,
+};
+
+struct xdr_netobj {
+ unsigned int len;
+ u8 *data;
+};
+
+enum rpc_auth_flavors {
+ RPC_AUTH_NULL = 0,
+ RPC_AUTH_UNIX = 1,
+ RPC_AUTH_SHORT = 2,
+ RPC_AUTH_DES = 3,
+ RPC_AUTH_KRB = 4,
+ RPC_AUTH_GSS = 6,
+ RPC_AUTH_TLS = 7,
+ RPC_AUTH_MAXFLAVOR = 8,
+ RPC_AUTH_GSS_KRB5 = 390003,
+ RPC_AUTH_GSS_KRB5I = 390004,
+ RPC_AUTH_GSS_KRB5P = 390005,
+ RPC_AUTH_GSS_LKEY = 390006,
+ RPC_AUTH_GSS_LKEYI = 390007,
+ RPC_AUTH_GSS_LKEYP = 390008,
+ RPC_AUTH_GSS_SPKM = 390009,
+ RPC_AUTH_GSS_SPKMI = 390010,
+ RPC_AUTH_GSS_SPKMP = 390011,
+};
+
+enum rpc_auth_stat {
+ RPC_AUTH_OK = 0,
+ RPC_AUTH_BADCRED = 1,
+ RPC_AUTH_REJECTEDCRED = 2,
+ RPC_AUTH_BADVERF = 3,
+ RPC_AUTH_REJECTEDVERF = 4,
+ RPC_AUTH_TOOWEAK = 5,
+ RPCSEC_GSS_CREDPROBLEM = 13,
+ RPCSEC_GSS_CTXPROBLEM = 14,
+};
+
+struct cache_head {
+ struct hlist_node cache_list;
+ time64_t expiry_time;
+ time64_t last_refresh;
+ struct kref ref;
+ long unsigned int flags;
+};
+
+struct cache_detail {
+ struct module *owner;
+ int hash_size;
+ struct hlist_head *hash_table;
+ spinlock_t hash_lock;
+ char *name;
+ void (*cache_put)(struct kref *);
+ int (*cache_upcall)(struct cache_detail *, struct cache_head *);
+ void (*cache_request)(struct cache_detail *, struct cache_head *, char **, int *);
+ int (*cache_parse)(struct cache_detail *, char *, int);
+ int (*cache_show)(struct seq_file *, struct cache_detail *, struct cache_head *);
+ void (*warn_no_listener)(struct cache_detail *, int);
+ struct cache_head * (*alloc)();
+ void (*flush)();
+ int (*match)(struct cache_head *, struct cache_head *);
+ void (*init)(struct cache_head *, struct cache_head *);
+ void (*update)(struct cache_head *, struct cache_head *);
+ time64_t flush_time;
+ struct list_head others;
+ time64_t nextcheck;
+ int entries;
+ struct list_head queue;
+ atomic_t writers;
+ time64_t last_close;
+ time64_t last_warn;
+ union {
+ struct proc_dir_entry *procfs;
+ struct dentry *pipefs;
+ };
+ struct net *net;
+};
+
+struct cache_deferred_req;
+
+struct cache_req {
+ struct cache_deferred_req * (*defer)(struct cache_req *);
+ long unsigned int thread_wait;
+};
+
+struct cache_deferred_req {
+ struct hlist_node hash;
+ struct list_head recent;
+ struct cache_head *item;
+ void *owner;
+ void (*revisit)(struct cache_deferred_req *, int);
+};
+
+struct gss_api_mech;
+
+struct gss_ctx {
+ struct gss_api_mech *mech_type;
+ void *internal_ctx_id;
+ unsigned int slack;
+ unsigned int align;
+};
+
+struct gss_api_ops;
+
+struct pf_desc;
+
+struct gss_api_mech {
+ struct list_head gm_list;
+ struct module *gm_owner;
+ struct rpcsec_gss_oid gm_oid;
+ char *gm_name;
+ const struct gss_api_ops *gm_ops;
+ int gm_pf_num;
+ struct pf_desc *gm_pfs;
+ const char *gm_upcall_enctypes;
+};
+
+struct auth_domain;
+
+struct pf_desc {
+ u32 pseudoflavor;
+ u32 qop;
+ u32 service;
+ char *name;
+ char *auth_domain_name;
+ struct auth_domain *domain;
+ bool datatouch;
+};
+
+struct auth_ops;
+
+struct auth_domain {
+ struct kref ref;
+ struct hlist_node hash;
+ char *name;
+ struct auth_ops *flavour;
+ struct callback_head callback_head;
+};
+
+struct gss_api_ops {
+ int (*gss_import_sec_context)(const void *, size_t, struct gss_ctx *, time64_t *, gfp_t);
+ u32 (*gss_get_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+ u32 (*gss_verify_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+ u32 (*gss_wrap)(struct gss_ctx *, int, struct xdr_buf *, struct page **);
+ u32 (*gss_unwrap)(struct gss_ctx *, int, int, struct xdr_buf *);
+ void (*gss_delete_sec_context)(void *);
+};
+
+struct lwq {
+ spinlock_t lock;
+ struct llist_node *ready;
+ struct llist_head new;
+};
+
+struct svc_xprt_class;
+
+struct svc_xprt_ops;
+
+struct svc_xprt {
+ struct svc_xprt_class *xpt_class;
+ const struct svc_xprt_ops *xpt_ops;
+ struct kref xpt_ref;
+ struct list_head xpt_list;
+ struct lwq_node xpt_ready;
+ long unsigned int xpt_flags;
+ struct svc_serv *xpt_server;
+ atomic_t xpt_reserved;
+ atomic_t xpt_nr_rqsts;
+ struct mutex xpt_mutex;
+ spinlock_t xpt_lock;
+ void *xpt_auth_cache;
+ struct list_head xpt_deferred;
+ struct __kernel_sockaddr_storage xpt_local;
+ size_t xpt_locallen;
+ struct __kernel_sockaddr_storage xpt_remote;
+ size_t xpt_remotelen;
+ char xpt_remotebuf[58];
+ struct list_head xpt_users;
+ struct net *xpt_net;
+ netns_tracker ns_tracker;
+ const struct cred *xpt_cred;
+ struct rpc_xprt *xpt_bc_xprt;
+ struct rpc_xprt_switch *xpt_bc_xps;
+};
+
+struct svc_program;
+
+struct svc_stat;
+
+struct svc_pool;
+
+struct svc_serv {
+ struct svc_program *sv_programs;
+ struct svc_stat *sv_stats;
+ spinlock_t sv_lock;
+ unsigned int sv_nprogs;
+ unsigned int sv_nrthreads;
+ unsigned int sv_maxconn;
+ unsigned int sv_max_payload;
+ unsigned int sv_max_mesg;
+ unsigned int sv_xdrsize;
+ struct list_head sv_permsocks;
+ struct list_head sv_tempsocks;
+ int sv_tmpcnt;
+ struct timer_list sv_temptimer;
+ char *sv_name;
+ unsigned int sv_nrpools;
+ bool sv_is_pooled;
+ struct svc_pool *sv_pools;
+ int (*sv_threadfn)(void *);
+ struct lwq sv_cb_list;
+ bool sv_bc_enabled;
+};
+
+struct svc_stat {
+ struct svc_program *program;
+ unsigned int netcnt;
+ unsigned int netudpcnt;
+ unsigned int nettcpcnt;
+ unsigned int nettcpconn;
+ unsigned int rpccnt;
+ unsigned int rpcbadfmt;
+ unsigned int rpcbadauth;
+ unsigned int rpcbadclnt;
+};
+
+enum svc_auth_status {
+ SVC_GARBAGE = 1,
+ SVC_SYSERR = 2,
+ SVC_VALID = 3,
+ SVC_NEGATIVE = 4,
+ SVC_OK = 5,
+ SVC_DROP = 6,
+ SVC_CLOSE = 7,
+ SVC_DENIED = 8,
+ SVC_PENDING = 9,
+ SVC_COMPLETE = 10,
+};
+
+struct svc_version;
+
+struct svc_rqst;
+
+struct svc_process_info;
+
+struct svc_program {
+ u32 pg_prog;
+ unsigned int pg_lovers;
+ unsigned int pg_hivers;
+ unsigned int pg_nvers;
+ const struct svc_version **pg_vers;
+ char *pg_name;
+ char *pg_class;
+ enum svc_auth_status (*pg_authenticate)(struct svc_rqst *);
+ __be32 (*pg_init_request)(struct svc_rqst *, const struct svc_program *, struct svc_process_info *);
+ int (*pg_rpcbind_set)(struct net *, const struct svc_program *, u32, int, short unsigned int, short unsigned int);
+};
+
+struct rpc_pipe_msg {
+ struct list_head list;
+ void *data;
+ size_t len;
+ size_t copied;
+ int errno;
+};
+
+struct rpc_pipe_ops {
+ ssize_t (*upcall)(struct file *, struct rpc_pipe_msg *, char *, size_t);
+ ssize_t (*downcall)(struct file *, const char *, size_t);
+ void (*release_pipe)(struct inode *);
+ int (*open_pipe)(struct inode *);
+ void (*destroy_msg)(struct rpc_pipe_msg *);
+};
+
+struct rpc_pipe {
+ struct list_head pipe;
+ struct list_head in_upcall;
+ struct list_head in_downcall;
+ int pipelen;
+ int nreaders;
+ int nwriters;
+ int flags;
+ struct delayed_work queue_timeout;
+ const struct rpc_pipe_ops *ops;
+ spinlock_t lock;
+ struct dentry *dentry;
+};
+
+struct svc_cred {
+ kuid_t cr_uid;
+ kgid_t cr_gid;
+ struct group_info *cr_group_info;
+ u32 cr_flavor;
+ char *cr_raw_principal;
+ char *cr_principal;
+ char *cr_targ_princ;
+ struct gss_api_mech *cr_gss_mech;
+};
+
+struct auth_ops {
+ char *name;
+ struct module *owner;
+ int flavour;
+ enum svc_auth_status (*accept)(struct svc_rqst *);
+ int (*release)(struct svc_rqst *);
+ void (*domain_release)(struct auth_domain *);
+ enum svc_auth_status (*set_client)(struct svc_rqst *);
+ rpc_authflavor_t (*pseudoflavor)(struct svc_rqst *);
+};
+
+struct svc_procedure;
+
+struct svc_deferred_req;
+
+struct svc_rqst {
+ struct list_head rq_all;
+ struct llist_node rq_idle;
+ struct callback_head rq_rcu_head;
+ struct svc_xprt *rq_xprt;
+ struct __kernel_sockaddr_storage rq_addr;
+ size_t rq_addrlen;
+ struct __kernel_sockaddr_storage rq_daddr;
+ size_t rq_daddrlen;
+ struct svc_serv *rq_server;
+ struct svc_pool *rq_pool;
+ const struct svc_procedure *rq_procinfo;
+ struct auth_ops *rq_authop;
+ struct svc_cred rq_cred;
+ void *rq_xprt_ctxt;
+ struct svc_deferred_req *rq_deferred;
+ struct xdr_buf rq_arg;
+ struct xdr_stream rq_arg_stream;
+ struct xdr_stream rq_res_stream;
+ struct page *rq_scratch_page;
+ struct xdr_buf rq_res;
+ struct page *rq_pages[260];
+ struct page **rq_respages;
+ struct page **rq_next_page;
+ struct page **rq_page_end;
+ struct folio_batch rq_fbatch;
+ struct kvec rq_vec[259];
+ struct bio_vec rq_bvec[259];
+ __be32 rq_xid;
+ u32 rq_prog;
+ u32 rq_vers;
+ u32 rq_proc;
+ u32 rq_prot;
+ int rq_cachetype;
+ long unsigned int rq_flags;
+ ktime_t rq_qtime;
+ void *rq_argp;
+ void *rq_resp;
+ __be32 *rq_accept_statp;
+ void *rq_auth_data;
+ __be32 rq_auth_stat;
+ int rq_auth_slack;
+ int rq_reserved;
+ ktime_t rq_stime;
+ struct cache_req rq_chandle;
+ struct auth_domain *rq_client;
+ struct auth_domain *rq_gssclient;
+ struct task_struct *rq_task;
+ struct net *rq_bc_net;
+ int rq_err;
+ long unsigned int bc_to_initval;
+ unsigned int bc_to_retries;
+ void **rq_lease_breaker;
+ unsigned int rq_status_counter;
+};
+
+struct svc_pool {
+ unsigned int sp_id;
+ struct lwq sp_xprts;
+ unsigned int sp_nrthreads;
+ struct list_head sp_all_threads;
+ struct llist_head sp_idle_threads;
+ struct percpu_counter sp_messages_arrived;
+ struct percpu_counter sp_sockets_queued;
+ struct percpu_counter sp_threads_woken;
+ long unsigned int sp_flags;
+};
+
+enum {
+ SP_TASK_PENDING = 0,
+ SP_NEED_VICTIM = 1,
+ SP_VICTIM_REMAINS = 2,
+};
+
+struct svc_procedure {
+ __be32 (*pc_func)(struct svc_rqst *);
+ bool (*pc_decode)(struct svc_rqst *, struct xdr_stream *);
+ bool (*pc_encode)(struct svc_rqst *, struct xdr_stream *);
+ void (*pc_release)(struct svc_rqst *);
+ unsigned int pc_argsize;
+ unsigned int pc_argzero;
+ unsigned int pc_ressize;
+ unsigned int pc_cachetype;
+ unsigned int pc_xdrressize;
+ const char *pc_name;
+};
+
+struct svc_deferred_req {
+ u32 prot;
+ struct svc_xprt *xprt;
+ struct __kernel_sockaddr_storage addr;
+ size_t addrlen;
+ struct __kernel_sockaddr_storage daddr;
+ size_t daddrlen;
+ void *xprt_ctxt;
+ struct cache_deferred_req handle;
+ int argslen;
+ __be32 args[0];
+};
+
+enum {
+ RQ_SECURE = 0,
+ RQ_LOCAL = 1,
+ RQ_USEDEFERRAL = 2,
+ RQ_DROPME = 3,
+ RQ_VICTIM = 4,
+ RQ_DATA = 5,
+};
+
+struct svc_process_info {
+ union {
+ int (*dispatch)(struct svc_rqst *);
+ struct {
+ unsigned int lovers;
+ unsigned int hivers;
+ } mismatch;
+ };
+};
+
+struct svc_version {
+ u32 vs_vers;
+ u32 vs_nproc;
+ const struct svc_procedure *vs_proc;
+ long unsigned int *vs_count;
+ u32 vs_xdrsize;
+ bool vs_hidden;
+ bool vs_rpcb_optnl;
+ bool vs_need_cong_ctrl;
+ int (*vs_dispatch)(struct svc_rqst *);
+};
+
+struct svc_xprt_ops {
+ struct svc_xprt * (*xpo_create)(struct svc_serv *, struct net *, struct sockaddr *, int, int);
+ struct svc_xprt * (*xpo_accept)(struct svc_xprt *);
+ int (*xpo_has_wspace)(struct svc_xprt *);
+ int (*xpo_recvfrom)(struct svc_rqst *);
+ int (*xpo_sendto)(struct svc_rqst *);
+ int (*xpo_result_payload)(struct svc_rqst *, unsigned int, unsigned int);
+ void (*xpo_release_ctxt)(struct svc_xprt *, void *);
+ void (*xpo_detach)(struct svc_xprt *);
+ void (*xpo_free)(struct svc_xprt *);
+ void (*xpo_kill_temp_xprt)(struct svc_xprt *);
+ void (*xpo_handshake)(struct svc_xprt *);
+};
+
+struct svc_xprt_class {
+ const char *xcl_name;
+ struct module *xcl_owner;
+ const struct svc_xprt_ops *xcl_ops;
+ struct list_head xcl_list;
+ u32 xcl_max_payload;
+ int xcl_ident;
+};
+
+enum nfs4_callback_procnum {
+ CB_NULL = 0,
+ CB_COMPOUND = 1,
+};
+
+struct bl_dev_msg {
+ int32_t status;
+ uint32_t major;
+ uint32_t minor;
+};
+
+struct nfs_netns_client;
+
+struct nfs_net {
+ struct cache_detail *nfs_dns_resolve;
+ struct rpc_pipe *bl_device_pipe;
+ struct bl_dev_msg bl_mount_reply;
+ wait_queue_head_t bl_wq;
+ struct mutex bl_mutex;
+ struct list_head nfs_client_list;
+ struct list_head nfs_volume_list;
+ struct idr cb_ident_idr;
+ short unsigned int nfs_callback_tcpport;
+ short unsigned int nfs_callback_tcpport6;
+ int cb_users[3];
+ struct nfs_netns_client *nfs_client;
+ spinlock_t nfs_client_lock;
+ ktime_t boot_time;
+ struct rpc_stat rpcstats;
+ struct proc_dir_entry *proc_nfsfs;
+};
+
+struct nfs_callback_data {
+ unsigned int users;
+ struct svc_serv *serv;
+};
+
+struct nfs4_sessionid {
+ unsigned char data[16];
+};
+
+struct nfs4_channel_attrs {
+ u32 max_rqst_sz;
+ u32 max_resp_sz;
+ u32 max_resp_sz_cached;
+ u32 max_ops;
+ u32 max_reqs;
+};
+
+struct nfs4_slot {
+ struct nfs4_slot_table *table;
+ struct nfs4_slot *next;
+ long unsigned int generation;
+ u32 slot_nr;
+ u32 seq_nr;
+ u32 seq_nr_last_acked;
+ u32 seq_nr_highest_sent;
+ unsigned int privileged: 1;
+ unsigned int seq_done: 1;
+};
+
+struct nfs4_slot_table {
+ struct nfs4_session *session;
+ struct nfs4_slot *slots;
+ long unsigned int used_slots[16];
+ spinlock_t slot_tbl_lock;
+ struct rpc_wait_queue slot_tbl_waitq;
+ wait_queue_head_t slot_waitq;
+ u32 max_slots;
+ u32 max_slotid;
+ u32 highest_used_slotid;
+ u32 target_highest_slotid;
+ u32 server_highest_slotid;
+ s32 d_target_highest_slotid;
+ s32 d2_target_highest_slotid;
+ long unsigned int generation;
+ struct completion complete;
+ long unsigned int slot_tbl_state;
+};
+
+struct nfs4_session {
+ struct nfs4_sessionid sess_id;
+ u32 flags;
+ long unsigned int session_state;
+ u32 hash_alg;
+ u32 ssv_len;
+ struct nfs4_channel_attrs fc_attrs;
+ struct nfs4_slot_table fc_slot_table;
+ struct nfs4_channel_attrs bc_attrs;
+ struct nfs4_slot_table bc_slot_table;
+ struct nfs_client *clp;
+};
+
+struct nfs4_pnfs_ds_addr {
+ struct __kernel_sockaddr_storage da_addr;
+ size_t da_addrlen;
+ struct list_head da_node;
+ char *da_remotestr;
+ const char *da_netid;
+ int da_transport;
+};
+
+struct nfs4_pnfs_ds {
+ struct list_head ds_node;
+ char *ds_remotestr;
+ struct list_head ds_addrs;
+ struct nfs_client *ds_clp;
+ refcount_t ds_count;
+ long unsigned int ds_state;
+};
+
+enum {
+ NFS_DEVICEID_INVALID = 0,
+ NFS_DEVICEID_UNAVAILABLE = 1,
+ NFS_DEVICEID_NOCACHE = 2,
+};
+
+enum stripetype4 {
+ STRIPE_SPARSE = 1,
+ STRIPE_DENSE = 2,
+};
+
+struct nfs4_file_layout_dsaddr {
+ struct nfs4_deviceid_node id_node;
+ u32 stripe_count;
+ u8 *stripe_indices;
+ u32 ds_num;
+ struct nfs4_pnfs_ds *ds_list[0];
+};
+
+struct nfs4_filelayout_segment {
+ struct pnfs_layout_segment generic_hdr;
+ u32 stripe_type;
+ u32 commit_through_mds;
+ u32 stripe_unit;
+ u32 first_stripe_index;
+ u64 pattern_offset;
+ struct nfs4_deviceid deviceid;
+ struct nfs4_file_layout_dsaddr *dsaddr;
+ unsigned int num_fh;
+ struct nfs_fh **fh_array;
+};
+
+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 {
+ short unsigned int sin6_family;
+ __be16 sin6_port;
+ __be32 sin6_flowinfo;
+ struct in6_addr sin6_addr;
+ __u32 sin6_scope_id;
+};
+
+struct rpc_create_args {
+ struct net *net;
+ int protocol;
+ struct sockaddr *address;
+ size_t addrsize;
+ struct sockaddr *saddress;
+ const struct rpc_timeout *timeout;
+ const char *servername;
+ const char *nodename;
+ const struct rpc_program *program;
+ struct rpc_stat *stats;
+ u32 prognumber;
+ u32 version;
+ rpc_authflavor_t authflavor;
+ u32 nconnect;
+ long unsigned int flags;
+ char *client_name;
+ struct svc_xprt *bc_xprt;
+ const struct cred *cred;
+ unsigned int max_connect;
+ struct xprtsec_parms xprtsec;
+ long unsigned int connect_timeout;
+ long unsigned int reconnect_timeout;
+};
+
+struct lock_manager {
+ struct list_head list;
+ bool block_opens;
+};
+
+struct nlm_lockowner {
+ struct list_head list;
+ refcount_t count;
+ struct nlm_host *host;
+ fl_owner_t owner;
+ uint32_t pid;
+};
+
+struct nsm_private {
+ unsigned char data[16];
+};
+
+struct nlm_reboot {
+ char *mon;
+ unsigned int len;
+ u32 state;
+ struct nsm_private priv;
+};
+
+struct nsm_handle;
+
+struct nlm_host {
+ struct hlist_node h_hash;
+ struct __kernel_sockaddr_storage h_addr;
+ size_t h_addrlen;
+ struct __kernel_sockaddr_storage h_srcaddr;
+ size_t h_srcaddrlen;
+ struct rpc_clnt *h_rpcclnt;
+ char *h_name;
+ u32 h_version;
+ short unsigned int h_proto;
+ short unsigned int h_reclaiming: 1;
+ short unsigned int h_server: 1;
+ short unsigned int h_noresvport: 1;
+ short unsigned int h_inuse: 1;
+ wait_queue_head_t h_gracewait;
+ struct rw_semaphore h_rwsem;
+ u32 h_state;
+ u32 h_nsmstate;
+ u32 h_pidcount;
+ refcount_t h_count;
+ struct mutex h_mutex;
+ long unsigned int h_nextrebind;
+ long unsigned int h_expires;
+ struct list_head h_lockowners;
+ spinlock_t h_lock;
+ struct list_head h_granted;
+ struct list_head h_reclaim;
+ struct nsm_handle *h_nsmhandle;
+ char *h_addrbuf;
+ struct net *net;
+ const struct cred *h_cred;
+ char nodename[65];
+ const struct nlmclnt_operations *h_nlmclnt_ops;
+};
+
+struct nsm_handle {
+ struct list_head sm_link;
+ refcount_t sm_count;
+ char *sm_mon_name;
+ char *sm_name;
+ struct __kernel_sockaddr_storage sm_addr;
+ size_t sm_addrlen;
+ unsigned int sm_monitored: 1;
+ unsigned int sm_sticky: 1;
+ struct nsm_private sm_priv;
+ char sm_addrbuf[51];
+};
+
+struct lockd_net {
+ unsigned int nlmsvc_users;
+ long unsigned int next_gc;
+ long unsigned int nrhosts;
+ struct delayed_work grace_period_end;
+ struct lock_manager lockd_manager;
+ struct list_head nsm_handles;
+};
+
+struct nlm_lookup_host_info {
+ const int server;
+ const struct sockaddr *sap;
+ const size_t salen;
+ const short unsigned int protocol;
+ const u32 version;
+ const char *hostname;
+ const size_t hostname_len;
+ const int noresvport;
+ struct net *net;
+ const struct cred *cred;
+};
+
+enum {
+ NLM_LCK_GRANTED = 0,
+ NLM_LCK_DENIED = 1,
+ NLM_LCK_DENIED_NOLOCKS = 2,
+ NLM_LCK_BLOCKED = 3,
+ NLM_LCK_DENIED_GRACE_PERIOD = 4,
+ NLM_DEADLCK = 5,
+ NLM_ROFS = 6,
+ NLM_STALE_FH = 7,
+ NLM_FBIG = 8,
+ NLM_FAILED = 9,
+};
+
+struct nlm_lock {
+ char *caller;
+ unsigned int len;
+ struct nfs_fh fh;
+ struct xdr_netobj oh;
+ u32 svid;
+ u64 lock_start;
+ u64 lock_len;
+ struct file_lock fl;
+};
+
+struct nlm_cookie {
+ unsigned char data[32];
+ unsigned int len;
+};
+
+struct nlm_args {
+ struct nlm_cookie cookie;
+ struct nlm_lock lock;
+ u32 block;
+ u32 reclaim;
+ u32 state;
+ u32 monitor;
+ u32 fsm_access;
+ u32 fsm_mode;
+};
+
+struct nlm_res {
+ struct nlm_cookie cookie;
+ __be32 status;
+ struct nlm_lock lock;
+};
+
+typedef unsigned int autofs_wqt_t;
+
+struct autofs_sb_info;
+
+struct autofs_info {
+ struct dentry *dentry;
+ int flags;
+ struct completion expire_complete;
+ struct list_head active;
+ struct list_head expiring;
+ struct autofs_sb_info *sbi;
+ long unsigned int exp_timeout;
+ long unsigned int last_used;
+ int count;
+ kuid_t uid;
+ kgid_t gid;
+ struct callback_head rcu;
+};
+
+struct autofs_wait_queue;
+
+struct autofs_sb_info {
+ u32 magic;
+ int pipefd;
+ struct file *pipe;
+ struct pid *oz_pgrp;
+ int version;
+ int sub_version;
+ int min_proto;
+ int max_proto;
+ unsigned int flags;
+ long unsigned int exp_timeout;
+ unsigned int type;
+ struct super_block *sb;
+ struct mutex wq_mutex;
+ struct mutex pipe_mutex;
+ spinlock_t fs_lock;
+ struct autofs_wait_queue *queues;
+ spinlock_t lookup_lock;
+ struct list_head active_list;
+ struct list_head expiring_list;
+ struct callback_head rcu;
+};
+
+struct autofs_wait_queue {
+ wait_queue_head_t queue;
+ struct autofs_wait_queue *next;
+ autofs_wqt_t wait_queue_token;
+ struct qstr name;
+ u32 offset;
+ u32 dev;
+ u64 ino;
+ kuid_t uid;
+ kgid_t gid;
+ pid_t pid;
+ pid_t tgid;
+ int status;
+ unsigned int wait_ctr;
+};
+
+enum {
+ Opt_direct = 0,
+ Opt_fd = 1,
+ Opt_gid = 2,
+ Opt_ignore = 3,
+ Opt_indirect = 4,
+ Opt_maxproto = 5,
+ Opt_minproto = 6,
+ Opt_offset = 7,
+ Opt_pgrp = 8,
+ Opt_strictexpire = 9,
+ Opt_uid = 10,
+};
+
+struct autofs_fs_context {
+ kuid_t uid;
+ kgid_t gid;
+ int pgrp;
+ bool pgrp_set;
+};
+
+enum p9_open_mode_t {
+ P9_OREAD = 0,
+ P9_OWRITE = 1,
+ P9_ORDWR = 2,
+ P9_OEXEC = 3,
+ P9_OTRUNC = 16,
+ P9_OREXEC = 32,
+ P9_ORCLOSE = 64,
+ P9_OAPPEND = 128,
+ P9_OEXCL = 4096,
+ P9L_MODE_MASK = 8191,
+ P9L_DIRECT = 8192,
+ P9L_NOWRITECACHE = 16384,
+ P9L_LOOSE = 32768,
+};
+
+struct p9_qid {
+ u8 type;
+ u32 version;
+ u64 path;
+};
+
+enum p9_trans_status {
+ Connected = 0,
+ BeginDisconnect = 1,
+ Disconnected = 2,
+ Hung = 3,
+};
+
+struct p9_trans_module;
+
+struct p9_client {
+ spinlock_t lock;
+ unsigned int msize;
+ unsigned char proto_version;
+ struct p9_trans_module *trans_mod;
+ enum p9_trans_status status;
+ void *trans;
+ struct kmem_cache *fcall_cache;
+ union {
+ struct {
+ int rfd;
+ int wfd;
+ } fd;
+ struct {
+ u16 port;
+ bool privport;
+ } tcp;
+ } trans_opts;
+ struct idr fids;
+ struct idr reqs;
+ char name[65];
+};
+
+struct p9_fid {
+ struct p9_client *clnt;
+ u32 fid;
+ refcount_t count;
+ int mode;
+ struct p9_qid qid;
+ u32 iounit;
+ kuid_t uid;
+ void *rdir;
+ struct hlist_node dlist;
+ struct hlist_node ilist;
+};
+
+struct name_snapshot {
+ struct qstr name;
+ unsigned char inline_name[40];
+};
+
+struct tree_descr {
+ const char *name;
+ const struct file_operations *ops;
+ int mode;
+};
+
+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,
+};
+
+typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
+
+struct debugfs_cancellation {
+ struct list_head list;
+ void (*cancel)(struct dentry *, void *);
+ void *cancel_data;
+};
+
+enum fsnotify_data_type {
+ FSNOTIFY_EVENT_NONE = 0,
+ FSNOTIFY_EVENT_PATH = 1,
+ FSNOTIFY_EVENT_INODE = 2,
+ FSNOTIFY_EVENT_DENTRY = 3,
+ FSNOTIFY_EVENT_ERROR = 4,
+};
+
+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 debugfs_fsdata {
+ const struct file_operations *real_fops;
+ union {
+ debugfs_automount_t automount;
+ struct {
+ refcount_t active_users;
+ struct completion active_users_drained;
+ struct mutex cancellations_mtx;
+ struct list_head cancellations;
+ };
+ };
+};
+
+struct debugfs_fs_info {
+ kuid_t uid;
+ kgid_t gid;
+ umode_t mode;
+ unsigned int opts;
+};
+
+enum {
+ Opt_uid___2 = 0,
+ Opt_gid___2 = 1,
+ Opt_mode = 2,
+ Opt_source = 3,
+};
+
+struct ipc_ids {
+ int in_use;
+ short unsigned int seq;
+ struct rw_semaphore rwsem;
+ struct idr ipcs_idr;
+ int max_idx;
+ int last_idx;
+ int next_id;
+ 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;
+ long unsigned int 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;
+};
+
+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,
+};
+
+struct __key_reference_with_attributes;
+
+typedef struct __key_reference_with_attributes *key_ref_t;
+
+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;
+};
+
+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 key_state {
+ KEY_IS_UNINSTANTIATED = 0,
+ KEY_IS_POSITIVE = 1,
+};
+
+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;
+};
+
+typedef int __kernel_key_t;
+
+typedef __u16 __sum16;
+
+typedef __kernel_key_t key_t;
+
+typedef u8 uint8_t;
+
+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 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;
+ long: 64;
+ struct {
+ struct llist_head task_list;
+ struct callback_head task_work;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ };
+};
+
+struct timezone {
+ int tz_minuteswest;
+ int tz_dsttime;
+};
+
+struct lsm_ctx {
+ __u64 id;
+ __u64 flags;
+ __u64 len;
+ __u64 ctx_len;
+ __u8 ctx[0];
+};
+
+struct io_uring_sqe;
+
+struct io_uring_cmd {
+ struct file *file;
+ const struct io_uring_sqe *sqe;
+ void (*task_work_cb)(struct io_uring_cmd *, unsigned int);
+ u32 cmd_op;
+ u32 flags;
+ u8 pdu[32];
+};
+
+struct rhlist_head {
+ struct rhash_head rhead;
+ struct rhlist_head *next;
+};
+
+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;
+ long unsigned int seq;
+ void *security;
+ struct rhash_head khtnode;
+ struct callback_head rcu;
+ refcount_t refcount;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct sembuf {
+ short unsigned int sem_num;
+ short int sem_op;
+ short int sem_flg;
+};
+
+enum lsm_event {
+ LSM_POLICY_CHANGE = 0,
+};
+
+enum lsm_integrity_type {
+ LSM_INT_DMVERITY_SIG_VALID = 0,
+ LSM_INT_DMVERITY_ROOTHASH = 1,
+ LSM_INT_FSVERITY_BUILTINSIG_VALID = 2,
+};
+
+struct lsm_id {
+ const char *name;
+ u64 id;
+};
+
+struct xattr {
+ const char *name;
+ void *value;
+ size_t value_len;
+};
+
+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,
+};
+
+struct msg_msg;
+
+struct sctp_association;
+
+struct audit_krule;
+
+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, const 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);
+ int (*bprm_creds_for_exec)(struct linux_binprm *);
+ int (*bprm_creds_from_file)(struct linux_binprm *, const struct file *);
+ int (*bprm_check_security)(struct linux_binprm *);
+ void (*bprm_committing_creds)(const struct linux_binprm *);
+ void (*bprm_committed_creds)(const 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)(const 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 *, long unsigned int, 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 *, long unsigned int, long unsigned int *);
+ int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, long unsigned int, long unsigned int *);
+ 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_unlink)(const struct path *, struct dentry *);
+ int (*path_mkdir)(const struct path *, struct dentry *, umode_t);
+ int (*path_rmdir)(const struct path *, struct dentry *);
+ int (*path_mknod)(const struct path *, struct dentry *, umode_t, unsigned int);
+ void (*path_post_mknod)(struct mnt_idmap *, struct dentry *);
+ int (*path_truncate)(const struct path *);
+ int (*path_symlink)(const struct path *, struct dentry *, const char *);
+ int (*path_link)(struct dentry *, const struct path *, struct dentry *);
+ int (*path_rename)(const struct path *, struct dentry *, const struct path *, struct dentry *, unsigned int);
+ int (*path_chmod)(const struct path *, umode_t);
+ int (*path_chown)(const struct path *, kuid_t, kgid_t);
+ int (*path_chroot)(const struct path *);
+ int (*path_notify)(const struct path *, u64, unsigned int);
+ int (*inode_alloc_security)(struct inode *);
+ void (*inode_free_security)(struct inode *);
+ void (*inode_free_security_rcu)(void *);
+ 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);
+ void (*inode_post_create_tmpfile)(struct mnt_idmap *, struct inode *);
+ 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 mnt_idmap *, struct dentry *, struct iattr *);
+ void (*inode_post_setattr)(struct mnt_idmap *, struct dentry *, int);
+ int (*inode_getattr)(const struct path *);
+ int (*inode_xattr_skipcap)(const char *);
+ 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 *);
+ void (*inode_post_removexattr)(struct dentry *, const char *);
+ int (*inode_set_acl)(struct mnt_idmap *, struct dentry *, const char *, struct posix_acl *);
+ void (*inode_post_set_acl)(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 *);
+ void (*inode_post_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)(struct dentry *, const char *);
+ int (*inode_setintegrity)(const struct inode *, enum lsm_integrity_type, const void *, size_t);
+ int (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);
+ int (*file_permission)(struct file *, int);
+ int (*file_alloc_security)(struct file *);
+ void (*file_release)(struct file *);
+ void (*file_free_security)(struct file *);
+ int (*file_ioctl)(struct file *, unsigned int, long unsigned int);
+ int (*file_ioctl_compat)(struct file *, unsigned int, long unsigned int);
+ int (*mmap_addr)(long unsigned int);
+ int (*mmap_file)(struct file *, long unsigned int, long unsigned int, long unsigned int);
+ int (*file_mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int);
+ int (*file_lock)(struct file *, unsigned int);
+ int (*file_fcntl)(struct file *, unsigned int, long unsigned int);
+ 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_post_open)(struct file *, int);
+ int (*file_truncate)(struct file *);
+ int (*task_alloc)(struct task_struct *, long unsigned int);
+ 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, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+ void (*task_to_inode)(struct task_struct *, struct inode *);
+ int (*userns_create)(const struct cred *);
+ int (*ipc_permission)(struct kern_ipc_perm *, short int);
+ 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);
+ 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 *, 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 (*getselfattr)(unsigned int, struct lsm_ctx *, u32 *, u32);
+ int (*setselfattr)(unsigned int, struct lsm_ctx *, u32, u32);
+ 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 *);
+ 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 *, long unsigned int);
+ int (*key_permission)(key_ref_t, const struct cred *, enum key_need_perm);
+ int (*key_getsecurity)(struct key *, char **);
+ void (*key_post_create_or_update)(struct key *, struct key *, const void *, size_t, long unsigned int, bool);
+ int (*audit_rule_init)(u32, u32, char *, void **, gfp_t);
+ 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_create)(struct bpf_map *, union bpf_attr *, struct bpf_token *);
+ void (*bpf_map_free)(struct bpf_map *);
+ int (*bpf_prog_load)(struct bpf_prog *, union bpf_attr *, struct bpf_token *);
+ void (*bpf_prog_free)(struct bpf_prog *);
+ int (*bpf_token_create)(struct bpf_token *, union bpf_attr *, const struct path *);
+ void (*bpf_token_free)(struct bpf_token *);
+ int (*bpf_token_cmd)(const struct bpf_token *, enum bpf_cmd);
+ int (*bpf_token_capable)(const struct bpf_token *, int);
+ int (*locked_down)(enum lockdown_reason);
+ int (*perf_event_open)(struct perf_event_attr *, int);
+ int (*perf_event_alloc)(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 *);
+ void (*initramfs_populated)();
+ int (*bdev_alloc_security)(struct block_device *);
+ void (*bdev_free_security)(struct block_device *);
+ int (*bdev_setintegrity)(struct block_device *, enum lsm_integrity_type, const void *, size_t);
+ void *lsm_func_addr;
+};
+
+struct msg_msgseg;
+
+struct msg_msg {
+ struct list_head m_list;
+ long int m_type;
+ size_t m_ts;
+ struct msg_msgseg *next;
+ void *security;
+};
+
+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;
+
+union sctp_addr {
+ struct sockaddr_in v4;
+ struct sockaddr_in6 v6;
+ struct sockaddr sa;
+};
+
+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;
+};
+
+struct sctp_tsnmap {
+ long unsigned int *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_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 genradix_root;
+
+struct __genradix {
+ struct genradix_root *root;
+};
+
+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;
+ long unsigned int rto_initial;
+ long unsigned int rto_max;
+ long unsigned int rto_min;
+ int max_burst;
+ int max_retrans;
+ __u16 pf_retrans;
+ __u16 ps_retrans;
+ __u16 max_init_attempts;
+ __u16 init_retries;
+ long unsigned int max_init_timeo;
+ long unsigned int hbinterval;
+ long unsigned int probe_interval;
+ __be16 encap_port;
+ __u16 pathmaxrxt;
+ __u32 flowlabel;
+ __u8 dscp;
+ __u8 pmtu_pending;
+ __u32 pathmtu;
+ __u32 param_flags;
+ __u32 sackfreq;
+ long unsigned int sackdelay;
+ long unsigned int 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 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 security_hook_list;
+
+struct lsm_static_call {
+ struct static_call_key *key;
+ void *trampoline;
+ struct security_hook_list *hl;
+ struct static_key_false *active;
+};
+
+struct security_hook_list {
+ struct lsm_static_call *scalls;
+ union security_list_options hook;
+ const struct lsm_id *lsmid;
+};
+
+struct lsm_static_calls_table {
+ struct lsm_static_call binder_set_context_mgr[3];
+ struct lsm_static_call binder_transaction[3];
+ struct lsm_static_call binder_transfer_binder[3];
+ struct lsm_static_call binder_transfer_file[3];
+ struct lsm_static_call ptrace_access_check[3];
+ struct lsm_static_call ptrace_traceme[3];
+ struct lsm_static_call capget[3];
+ struct lsm_static_call capset[3];
+ struct lsm_static_call capable[3];
+ struct lsm_static_call quotactl[3];
+ struct lsm_static_call quota_on[3];
+ struct lsm_static_call syslog[3];
+ struct lsm_static_call settime[3];
+ struct lsm_static_call vm_enough_memory[3];
+ struct lsm_static_call bprm_creds_for_exec[3];
+ struct lsm_static_call bprm_creds_from_file[3];
+ struct lsm_static_call bprm_check_security[3];
+ struct lsm_static_call bprm_committing_creds[3];
+ struct lsm_static_call bprm_committed_creds[3];
+ struct lsm_static_call fs_context_submount[3];
+ struct lsm_static_call fs_context_dup[3];
+ struct lsm_static_call fs_context_parse_param[3];
+ struct lsm_static_call sb_alloc_security[3];
+ struct lsm_static_call sb_delete[3];
+ struct lsm_static_call sb_free_security[3];
+ struct lsm_static_call sb_free_mnt_opts[3];
+ struct lsm_static_call sb_eat_lsm_opts[3];
+ struct lsm_static_call sb_mnt_opts_compat[3];
+ struct lsm_static_call sb_remount[3];
+ struct lsm_static_call sb_kern_mount[3];
+ struct lsm_static_call sb_show_options[3];
+ struct lsm_static_call sb_statfs[3];
+ struct lsm_static_call sb_mount[3];
+ struct lsm_static_call sb_umount[3];
+ struct lsm_static_call sb_pivotroot[3];
+ struct lsm_static_call sb_set_mnt_opts[3];
+ struct lsm_static_call sb_clone_mnt_opts[3];
+ struct lsm_static_call move_mount[3];
+ struct lsm_static_call dentry_init_security[3];
+ struct lsm_static_call dentry_create_files_as[3];
+ struct lsm_static_call path_unlink[3];
+ struct lsm_static_call path_mkdir[3];
+ struct lsm_static_call path_rmdir[3];
+ struct lsm_static_call path_mknod[3];
+ struct lsm_static_call path_post_mknod[3];
+ struct lsm_static_call path_truncate[3];
+ struct lsm_static_call path_symlink[3];
+ struct lsm_static_call path_link[3];
+ struct lsm_static_call path_rename[3];
+ struct lsm_static_call path_chmod[3];
+ struct lsm_static_call path_chown[3];
+ struct lsm_static_call path_chroot[3];
+ struct lsm_static_call path_notify[3];
+ struct lsm_static_call inode_alloc_security[3];
+ struct lsm_static_call inode_free_security[3];
+ struct lsm_static_call inode_free_security_rcu[3];
+ struct lsm_static_call inode_init_security[3];
+ struct lsm_static_call inode_init_security_anon[3];
+ struct lsm_static_call inode_create[3];
+ struct lsm_static_call inode_post_create_tmpfile[3];
+ struct lsm_static_call inode_link[3];
+ struct lsm_static_call inode_unlink[3];
+ struct lsm_static_call inode_symlink[3];
+ struct lsm_static_call inode_mkdir[3];
+ struct lsm_static_call inode_rmdir[3];
+ struct lsm_static_call inode_mknod[3];
+ struct lsm_static_call inode_rename[3];
+ struct lsm_static_call inode_readlink[3];
+ struct lsm_static_call inode_follow_link[3];
+ struct lsm_static_call inode_permission[3];
+ struct lsm_static_call inode_setattr[3];
+ struct lsm_static_call inode_post_setattr[3];
+ struct lsm_static_call inode_getattr[3];
+ struct lsm_static_call inode_xattr_skipcap[3];
+ struct lsm_static_call inode_setxattr[3];
+ struct lsm_static_call inode_post_setxattr[3];
+ struct lsm_static_call inode_getxattr[3];
+ struct lsm_static_call inode_listxattr[3];
+ struct lsm_static_call inode_removexattr[3];
+ struct lsm_static_call inode_post_removexattr[3];
+ struct lsm_static_call inode_set_acl[3];
+ struct lsm_static_call inode_post_set_acl[3];
+ struct lsm_static_call inode_get_acl[3];
+ struct lsm_static_call inode_remove_acl[3];
+ struct lsm_static_call inode_post_remove_acl[3];
+ struct lsm_static_call inode_need_killpriv[3];
+ struct lsm_static_call inode_killpriv[3];
+ struct lsm_static_call inode_getsecurity[3];
+ struct lsm_static_call inode_setsecurity[3];
+ struct lsm_static_call inode_listsecurity[3];
+ struct lsm_static_call inode_getsecid[3];
+ struct lsm_static_call inode_copy_up[3];
+ struct lsm_static_call inode_copy_up_xattr[3];
+ struct lsm_static_call inode_setintegrity[3];
+ struct lsm_static_call kernfs_init_security[3];
+ struct lsm_static_call file_permission[3];
+ struct lsm_static_call file_alloc_security[3];
+ struct lsm_static_call file_release[3];
+ struct lsm_static_call file_free_security[3];
+ struct lsm_static_call file_ioctl[3];
+ struct lsm_static_call file_ioctl_compat[3];
+ struct lsm_static_call mmap_addr[3];
+ struct lsm_static_call mmap_file[3];
+ struct lsm_static_call file_mprotect[3];
+ struct lsm_static_call file_lock[3];
+ struct lsm_static_call file_fcntl[3];
+ struct lsm_static_call file_set_fowner[3];
+ struct lsm_static_call file_send_sigiotask[3];
+ struct lsm_static_call file_receive[3];
+ struct lsm_static_call file_open[3];
+ struct lsm_static_call file_post_open[3];
+ struct lsm_static_call file_truncate[3];
+ struct lsm_static_call task_alloc[3];
+ struct lsm_static_call task_free[3];
+ struct lsm_static_call cred_alloc_blank[3];
+ struct lsm_static_call cred_free[3];
+ struct lsm_static_call cred_prepare[3];
+ struct lsm_static_call cred_transfer[3];
+ struct lsm_static_call cred_getsecid[3];
+ struct lsm_static_call kernel_act_as[3];
+ struct lsm_static_call kernel_create_files_as[3];
+ struct lsm_static_call kernel_module_request[3];
+ struct lsm_static_call kernel_load_data[3];
+ struct lsm_static_call kernel_post_load_data[3];
+ struct lsm_static_call kernel_read_file[3];
+ struct lsm_static_call kernel_post_read_file[3];
+ struct lsm_static_call task_fix_setuid[3];
+ struct lsm_static_call task_fix_setgid[3];
+ struct lsm_static_call task_fix_setgroups[3];
+ struct lsm_static_call task_setpgid[3];
+ struct lsm_static_call task_getpgid[3];
+ struct lsm_static_call task_getsid[3];
+ struct lsm_static_call current_getsecid_subj[3];
+ struct lsm_static_call task_getsecid_obj[3];
+ struct lsm_static_call task_setnice[3];
+ struct lsm_static_call task_setioprio[3];
+ struct lsm_static_call task_getioprio[3];
+ struct lsm_static_call task_prlimit[3];
+ struct lsm_static_call task_setrlimit[3];
+ struct lsm_static_call task_setscheduler[3];
+ struct lsm_static_call task_getscheduler[3];
+ struct lsm_static_call task_movememory[3];
+ struct lsm_static_call task_kill[3];
+ struct lsm_static_call task_prctl[3];
+ struct lsm_static_call task_to_inode[3];
+ struct lsm_static_call userns_create[3];
+ struct lsm_static_call ipc_permission[3];
+ struct lsm_static_call ipc_getsecid[3];
+ struct lsm_static_call msg_msg_alloc_security[3];
+ struct lsm_static_call msg_msg_free_security[3];
+ struct lsm_static_call msg_queue_alloc_security[3];
+ struct lsm_static_call msg_queue_free_security[3];
+ struct lsm_static_call msg_queue_associate[3];
+ struct lsm_static_call msg_queue_msgctl[3];
+ struct lsm_static_call msg_queue_msgsnd[3];
+ struct lsm_static_call msg_queue_msgrcv[3];
+ struct lsm_static_call shm_alloc_security[3];
+ struct lsm_static_call shm_free_security[3];
+ struct lsm_static_call shm_associate[3];
+ struct lsm_static_call shm_shmctl[3];
+ struct lsm_static_call shm_shmat[3];
+ struct lsm_static_call sem_alloc_security[3];
+ struct lsm_static_call sem_free_security[3];
+ struct lsm_static_call sem_associate[3];
+ struct lsm_static_call sem_semctl[3];
+ struct lsm_static_call sem_semop[3];
+ struct lsm_static_call netlink_send[3];
+ struct lsm_static_call d_instantiate[3];
+ struct lsm_static_call getselfattr[3];
+ struct lsm_static_call setselfattr[3];
+ struct lsm_static_call getprocattr[3];
+ struct lsm_static_call setprocattr[3];
+ struct lsm_static_call ismaclabel[3];
+ struct lsm_static_call secid_to_secctx[3];
+ struct lsm_static_call secctx_to_secid[3];
+ struct lsm_static_call release_secctx[3];
+ struct lsm_static_call inode_invalidate_secctx[3];
+ struct lsm_static_call inode_notifysecctx[3];
+ struct lsm_static_call inode_setsecctx[3];
+ struct lsm_static_call inode_getsecctx[3];
+ struct lsm_static_call unix_stream_connect[3];
+ struct lsm_static_call unix_may_send[3];
+ struct lsm_static_call socket_create[3];
+ struct lsm_static_call socket_post_create[3];
+ struct lsm_static_call socket_socketpair[3];
+ struct lsm_static_call socket_bind[3];
+ struct lsm_static_call socket_connect[3];
+ struct lsm_static_call socket_listen[3];
+ struct lsm_static_call socket_accept[3];
+ struct lsm_static_call socket_sendmsg[3];
+ struct lsm_static_call socket_recvmsg[3];
+ struct lsm_static_call socket_getsockname[3];
+ struct lsm_static_call socket_getpeername[3];
+ struct lsm_static_call socket_getsockopt[3];
+ struct lsm_static_call socket_setsockopt[3];
+ struct lsm_static_call socket_shutdown[3];
+ struct lsm_static_call socket_sock_rcv_skb[3];
+ struct lsm_static_call socket_getpeersec_stream[3];
+ struct lsm_static_call socket_getpeersec_dgram[3];
+ struct lsm_static_call sk_alloc_security[3];
+ struct lsm_static_call sk_free_security[3];
+ struct lsm_static_call sk_clone_security[3];
+ struct lsm_static_call sk_getsecid[3];
+ struct lsm_static_call sock_graft[3];
+ struct lsm_static_call inet_conn_request[3];
+ struct lsm_static_call inet_csk_clone[3];
+ struct lsm_static_call inet_conn_established[3];
+ struct lsm_static_call secmark_relabel_packet[3];
+ struct lsm_static_call secmark_refcount_inc[3];
+ struct lsm_static_call secmark_refcount_dec[3];
+ struct lsm_static_call req_classify_flow[3];
+ struct lsm_static_call tun_dev_alloc_security[3];
+ struct lsm_static_call tun_dev_create[3];
+ struct lsm_static_call tun_dev_attach_queue[3];
+ struct lsm_static_call tun_dev_attach[3];
+ struct lsm_static_call tun_dev_open[3];
+ struct lsm_static_call sctp_assoc_request[3];
+ struct lsm_static_call sctp_bind_connect[3];
+ struct lsm_static_call sctp_sk_clone[3];
+ struct lsm_static_call sctp_assoc_established[3];
+ struct lsm_static_call mptcp_add_subflow[3];
+ struct lsm_static_call key_alloc[3];
+ struct lsm_static_call key_permission[3];
+ struct lsm_static_call key_getsecurity[3];
+ struct lsm_static_call key_post_create_or_update[3];
+ struct lsm_static_call audit_rule_init[3];
+ struct lsm_static_call audit_rule_known[3];
+ struct lsm_static_call audit_rule_match[3];
+ struct lsm_static_call audit_rule_free[3];
+ struct lsm_static_call bpf[3];
+ struct lsm_static_call bpf_map[3];
+ struct lsm_static_call bpf_prog[3];
+ struct lsm_static_call bpf_map_create[3];
+ struct lsm_static_call bpf_map_free[3];
+ struct lsm_static_call bpf_prog_load[3];
+ struct lsm_static_call bpf_prog_free[3];
+ struct lsm_static_call bpf_token_create[3];
+ struct lsm_static_call bpf_token_free[3];
+ struct lsm_static_call bpf_token_cmd[3];
+ struct lsm_static_call bpf_token_capable[3];
+ struct lsm_static_call locked_down[3];
+ struct lsm_static_call perf_event_open[3];
+ struct lsm_static_call perf_event_alloc[3];
+ struct lsm_static_call perf_event_read[3];
+ struct lsm_static_call perf_event_write[3];
+ struct lsm_static_call uring_override_creds[3];
+ struct lsm_static_call uring_sqpoll[3];
+ struct lsm_static_call uring_cmd[3];
+ struct lsm_static_call initramfs_populated[3];
+ struct lsm_static_call bdev_alloc_security[3];
+ struct lsm_static_call bdev_free_security[3];
+ struct lsm_static_call bdev_setintegrity[3];
+};
+
+struct lsm_blob_sizes {
+ int lbs_cred;
+ int lbs_file;
+ int lbs_ib;
+ int lbs_inode;
+ int lbs_sock;
+ int lbs_superblock;
+ int lbs_ipc;
+ int lbs_key;
+ int lbs_msg_msg;
+ int lbs_perf_event;
+ int lbs_task;
+ int lbs_xattr_count;
+ int lbs_tun_dev;
+ int lbs_bdev;
+};
+
+enum lsm_order {
+ LSM_ORDER_FIRST = -1,
+ LSM_ORDER_MUTABLE = 0,
+ LSM_ORDER_LAST = 1,
+};
+
+struct lsm_info {
+ const char *name;
+ enum lsm_order order;
+ long unsigned int flags;
+ int *enabled;
+ int (*init)();
+ struct lsm_blob_sizes *blobs;
+};
+
+struct ethhdr {
+ unsigned char h_dest[6];
+ unsigned char h_source[6];
+ __be16 h_proto;
+};
+
+struct flowi4 {
+ struct flowi_common __fl_common;
+ __be32 saddr;
+ __be32 daddr;
+ union flowi_uli uli;
+};
+
+struct flowi {
+ union {
+ struct flowi_common __fl_common;
+ struct flowi4 ip4;
+ struct flowi6 ip6;
+ } u;
+};
+
+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 **nhc_pcpu_rth_output;
+ struct rtable *nhc_rth_input;
+ struct fnhe_hash_bucket *nhc_exceptions;
+};
+
+struct rt6_exception_bucket;
+
+struct fib6_nh {
+ struct fib_nh_common nh_common;
+ struct rt6_info **rt6i_pcpu;
+ struct rt6_exception_bucket *rt6i_exception_bucket;
+};
+
+struct fib6_node;
+
+struct dst_metrics;
+
+struct nexthop;
+
+struct fib6_info {
+ struct fib6_table *fib6_table;
+ struct fib6_info *fib6_next;
+ struct fib6_node *fib6_node;
+ union {
+ struct list_head fib6_siblings;
+ struct list_head nh_list;
+ };
+ unsigned int fib6_nsiblings;
+ refcount_t fib6_ref;
+ long unsigned int expires;
+ struct hlist_node gc_link;
+ 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;
+ struct fib6_nh fib6_nh[0];
+};
+
+struct rt6_info {
+ struct dst_entry dst;
+ struct fib6_info *from;
+ int sernum;
+ struct rt6key rt6i_dst;
+ struct rt6key rt6i_src;
+ struct in6_addr rt6i_gateway;
+ struct inet6_dev *rt6i_idev;
+ u32 rt6i_flags;
+ short unsigned int rt6i_nfheader_len;
+};
+
+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 fib6_node {
+ struct fib6_node *parent;
+ struct fib6_node *left;
+ struct fib6_node *right;
+ struct fib6_info *leaf;
+ __u16 fn_bit;
+ __u16 fn_flags;
+ int fn_sernum;
+ struct fib6_info *rr_ptr;
+ struct callback_head rcu;
+};
+
+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 hlist_head tb6_gc_hlist;
+};
+
+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];
+};
+
+typedef union {
+ __be32 a4;
+ __be32 a6[4];
+ struct in6_addr in6;
+} xfrm_address_t;
+
+struct xfrm_id {
+ xfrm_address_t daddr;
+ __be32 spi;
+ __u8 proto;
+};
+
+struct xfrm_sec_ctx {
+ __u8 ctx_doi;
+ __u8 ctx_alg;
+ __u16 ctx_len;
+ __u32 ctx_sid;
+ char ctx_str[0];
+};
+
+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_replay_state {
+ __u32 oseq;
+ __u32 seq;
+ __u32 bitmap;
+};
+
+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_algo {
+ char alg_name[64];
+ unsigned int alg_key_len;
+ char alg_key[0];
+};
+
+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_aead {
+ char alg_name[64];
+ unsigned int alg_key_len;
+ unsigned int alg_icv_len;
+ char alg_key[0];
+};
+
+struct xfrm_stats {
+ __u32 replay_window;
+ __u32 replay;
+ __u32 integrity_failed;
+};
+
+enum {
+ XFRM_POLICY_TYPE_MAIN = 0,
+ XFRM_POLICY_TYPE_SUB = 1,
+ XFRM_POLICY_TYPE_MAX = 2,
+ XFRM_POLICY_TYPE_ANY = 255,
+};
+
+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,
+};
+
+struct xfrm_encap_tmpl {
+ __u16 encap_type;
+ __be16 encap_sport;
+ __be16 encap_dport;
+ xfrm_address_t encap_oa;
+};
+
+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_SA_DIR = 33,
+ XFRMA_NAT_KEEPALIVE_INTERVAL = 34,
+ __XFRMA_MAX = 35,
+};
+
+struct xfrm_mark {
+ __u32 v;
+ __u32 m;
+};
+
+struct xfrm_address_filter {
+ xfrm_address_t saddr;
+ xfrm_address_t daddr;
+ __u16 family;
+ __u8 splen;
+ __u8 dplen;
+};
+
+struct ethtool_netdev_state {
+ struct xarray rss_ctx;
+ struct mutex rss_lock;
+ unsigned int wol_enabled: 1;
+ unsigned int module_fw_flash_in_progress: 1;
+};
+
+struct dim_cq_moder;
+
+struct dim_irq_moder {
+ u8 profile_flags;
+ u8 coal_flags;
+ u8 dim_rx_mode;
+ u8 dim_tx_mode;
+ struct dim_cq_moder *rx_profile;
+ struct dim_cq_moder *tx_profile;
+ void (*rx_dim_work)(struct work_struct *);
+ void (*tx_dim_work)(struct work_struct *);
+};
+
+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 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,
+};
+
+enum nf_ip6_hook_priorities {
+ NF_IP6_PRI_FIRST = -2147483648,
+ NF_IP6_PRI_RAW_BEFORE_DEFRAG = -450,
+ NF_IP6_PRI_CONNTRACK_DEFRAG = -400,
+ NF_IP6_PRI_RAW = -300,
+ NF_IP6_PRI_SELINUX_FIRST = -225,
+ NF_IP6_PRI_CONNTRACK = -200,
+ NF_IP6_PRI_MANGLE = -150,
+ NF_IP6_PRI_NAT_DST = -100,
+ NF_IP6_PRI_FILTER = 0,
+ NF_IP6_PRI_SECURITY = 50,
+ NF_IP6_PRI_NAT_SRC = 100,
+ NF_IP6_PRI_SELINUX_LAST = 225,
+ NF_IP6_PRI_CONNTRACK_HELPER = 300,
+ NF_IP6_PRI_LAST = 2147483647,
+};
+
+struct xfrm_state_walk {
+ struct list_head all;
+ u8 state;
+ u8 dying;
+ u8 proto;
+ u32 seq;
+ struct xfrm_address_filter *filter;
+};
+
+enum xfrm_replay_mode {
+ XFRM_REPLAY_MODE_LEGACY = 0,
+ XFRM_REPLAY_MODE_BMP = 1,
+ XFRM_REPLAY_MODE_ESN = 2,
+};
+
+struct xfrm_dev_offload {
+ struct net_device *dev;
+ netdevice_tracker dev_tracker;
+ struct net_device *real_dev;
+ long unsigned int offload_handle;
+ u8 dir: 2;
+ u8 type: 2;
+ u8 flags: 2;
+};
+
+struct xfrm_mode {
+ u8 encap;
+ u8 family;
+ u8 flags;
+};
+
+struct xfrm_type;
+
+struct xfrm_type_offload;
+
+struct xfrm_state {
+ possible_net_t xs_net;
+ union {
+ struct hlist_node gclist;
+ struct hlist_node bydst;
+ };
+ union {
+ struct hlist_node dev_gclist;
+ 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 *encap_sk;
+ u32 nat_keepalive_interval;
+ time64_t nat_keepalive_expiration;
+ 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 int 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;
+ u8 dir;
+};
+
+struct dst_metrics {
+ u32 metrics[17];
+ refcount_t 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,
+ TCPF_BOUND_INACTIVE = 8192,
+};
+
+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,
+};
+
+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;
+ long unsigned int timeout;
+};
+
+struct xfrm_tmpl {
+ struct xfrm_id id;
+ xfrm_address_t saddr;
+ short unsigned int encap_family;
+ u32 reqid;
+ u8 mode;
+ u8 share;
+ u8 optional;
+ u8 allalgs;
+ u32 aalgos;
+ u32 ealgos;
+ u32 calgos;
+};
+
+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 callback_head rcu;
+ struct xfrm_dev_offload xdo;
+};
+
+struct socket_alloc {
+ struct socket socket;
+ struct inode vfs_inode;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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 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 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_mc_socklist;
+
+struct inet_sock {
+ struct sock sk;
+ struct ipv6_pinfo *pinet6;
+ long unsigned int inet_flags;
+ __be32 inet_saddr;
+ __s16 uc_ttl;
+ __be16 inet_sport;
+ struct ip_options_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;
+ u32 local_port_range;
+ struct ip_mc_socklist *mc_list;
+ struct inet_cork_full cork;
+};
+
+struct in6_pktinfo {
+ struct in6_addr ipi6_addr;
+ int ipi6_ifindex;
+};
+
+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;
+ s16 hop_limit;
+ u8 mcast_hops;
+ 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;
+ __u8 srcprefs;
+ __u8 pmtudisc;
+ __u8 min_hopcount;
+ __u8 tclass;
+ __be32 rcv_flowinfo;
+ __u32 dst_cookie;
+ struct ipv6_mc_socklist *ipv6_mc_list;
+ struct ipv6_ac_socklist *ipv6_ac_list;
+ struct ipv6_fl_socklist *ipv6_fl_list;
+ struct ipv6_txoptions *opt;
+ struct sk_buff *pktoptions;
+ struct sk_buff *rxpmtu;
+ struct inet6_cork cork;
+};
+
+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 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 ipv6_rt_hdr {
+ __u8 nexthdr;
+ __u8 hdrlen;
+ __u8 type;
+ __u8 segments_left;
+};
+
+struct ipv6_opt_hdr {
+ __u8 nexthdr;
+ __u8 hdrlen;
+};
+
+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 udphdr {
+ __be16 source;
+ __be16 dest;
+ __be16 len;
+ __sum16 check;
+};
+
+struct inet6_skb_parm {
+ int iif;
+ __be16 ra;
+ __u16 dst0;
+ __u16 srcrt;
+ __u16 dst1;
+ __u16 lastopt;
+ __u16 nhoff;
+ __u16 flags;
+ __u16 frag_max_size;
+ __u16 srhoff;
+};
+
+struct ip6_sf_socklist;
+
+struct ipv6_mc_socklist {
+ struct in6_addr addr;
+ int ifindex;
+ unsigned int sfmode;
+ struct ipv6_mc_socklist *next;
+ struct ip6_sf_socklist *sflist;
+ struct callback_head rcu;
+};
+
+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 *next;
+ struct ip6_flowlabel *fl;
+ 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 ip6_flowlabel {
+ struct ip6_flowlabel *next;
+ __be32 label;
+ atomic_t users;
+ struct in6_addr dst;
+ struct ipv6_txoptions *opt;
+ long unsigned int linger;
+ struct callback_head rcu;
+ u8 share;
+ union {
+ struct pid *pid;
+ kuid_t uid;
+ } owner;
+ long unsigned int lastuse;
+ long unsigned int expires;
+ struct net *fl_net;
+};
+
+struct fib_nh_exception {
+ struct fib_nh_exception *fnhe_next;
+ int fnhe_genid;
+ __be32 fnhe_daddr;
+ u32 fnhe_pmtu;
+ bool fnhe_mtu_locked;
+ __be32 fnhe_gw;
+ long unsigned int fnhe_expires;
+ struct rtable *fnhe_rth_input;
+ struct rtable *fnhe_rth_output;
+ long unsigned int fnhe_stamp;
+ struct callback_head rcu;
+};
+
+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 fnhe_hash_bucket {
+ struct fib_nh_exception *chain;
+};
+
+struct inet_skb_parm {
+ int iif;
+ struct ip_options opt;
+ u16 flags;
+ u16 frag_max_size;
+};
+
+struct tty_file_private {
+ struct tty_struct *tty;
+ struct file *file;
+ struct list_head list;
+};
+
+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;
+};
+
+enum dccp_state {
+ DCCP_OPEN = 1,
+ DCCP_REQUESTING = 2,
+ DCCP_LISTEN = 10,
+ DCCP_RESPOND = 3,
+ DCCP_ACTIVE_CLOSEREQ = 4,
+ DCCP_PASSIVE_CLOSE = 8,
+ DCCP_CLOSING = 11,
+ DCCP_TIME_WAIT = 6,
+ DCCP_CLOSED = 7,
+ DCCP_NEW_SYN_RECV = 12,
+ DCCP_PARTOPEN = 14,
+ DCCP_PASSIVE_CLOSEREQ = 15,
+ DCCP_MAX_STATES = 16,
+};
+
+enum sctp_msg_flags {
+ MSG_NOTIFICATION = 32768,
+};
+
+struct sctp_initmsg {
+ __u16 sinit_num_ostreams;
+ __u16 sinit_max_instreams;
+ __u16 sinit_max_attempts;
+ __u16 sinit_max_init_timeo;
+};
+
+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_rtoinfo {
+ sctp_assoc_t srto_assoc_id;
+ __u32 srto_initial;
+ __u32 srto_max;
+ __u32 srto_min;
+};
+
+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_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 sctphdr {
+ __be16 source;
+ __be16 dest;
+ __be32 vtag;
+ __le32 checksum;
+};
+
+struct sctp_chunkhdr {
+ __u8 type;
+ __u8 flags;
+ __be16 length;
+};
+
+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,
+};
+
+struct sctp_paramhdr {
+ __be16 type;
+ __be16 length;
+};
+
+enum sctp_param {
+ SCTP_PARAM_HEARTBEAT_INFO = 256,
+ SCTP_PARAM_IPV4_ADDRESS = 1280,
+ SCTP_PARAM_IPV6_ADDRESS = 1536,
+ SCTP_PARAM_STATE_COOKIE = 1792,
+ SCTP_PARAM_UNRECOGNIZED_PARAMETERS = 2048,
+ SCTP_PARAM_COOKIE_PRESERVATIVE = 2304,
+ SCTP_PARAM_HOST_NAME_ADDRESS = 2816,
+ SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = 3072,
+ SCTP_PARAM_ECN_CAPABLE = 128,
+ SCTP_PARAM_RANDOM = 640,
+ SCTP_PARAM_CHUNKS = 896,
+ SCTP_PARAM_HMAC_ALGO = 1152,
+ SCTP_PARAM_SUPPORTED_EXT = 2176,
+ SCTP_PARAM_FWD_TSN_SUPPORT = 192,
+ SCTP_PARAM_ADD_IP = 448,
+ SCTP_PARAM_DEL_IP = 704,
+ SCTP_PARAM_ERR_CAUSE = 960,
+ SCTP_PARAM_SET_PRIMARY = 1216,
+ SCTP_PARAM_SUCCESS_REPORT = 1472,
+ SCTP_PARAM_ADAPTATION_LAYER_IND = 1728,
+ SCTP_PARAM_RESET_OUT_REQUEST = 3328,
+ SCTP_PARAM_RESET_IN_REQUEST = 3584,
+ SCTP_PARAM_RESET_TSN_REQUEST = 3840,
+ SCTP_PARAM_RESET_RESPONSE = 4096,
+ SCTP_PARAM_RESET_ADD_OUT_STREAMS = 4352,
+ SCTP_PARAM_RESET_ADD_IN_STREAMS = 4608,
+};
+
+struct sctp_datahdr {
+ __be32 tsn;
+ __be16 stream;
+ __be16 ssn;
+ __u32 ppid;
+};
+
+struct sctp_idatahdr {
+ __be32 tsn;
+ __be16 stream;
+ __be16 reserved;
+ __be32 mid;
+ union {
+ __u32 ppid;
+ __be32 fsn;
+ };
+ __u8 payload[0];
+};
+
+struct sctp_inithdr {
+ __be32 init_tag;
+ __be32 a_rwnd;
+ __be16 num_outbound_streams;
+ __be16 num_inbound_streams;
+ __be32 initial_tsn;
+};
+
+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;
+};
+
+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_supported_addrs_param {
+ struct sctp_paramhdr param_hdr;
+ __be16 types[0];
+};
+
+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_cookie_param {
+ struct sctp_paramhdr p;
+ __u8 body[0];
+};
+
+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_shutdownhdr {
+ __be32 cum_tsn_ack;
+};
+
+struct sctp_errhdr {
+ __be16 cause;
+ __be16 length;
+};
+
+struct sctp_ecnehdr {
+ __be32 lowest_tsn;
+};
+
+struct sctp_cwrhdr {
+ __be32 lowest_tsn;
+};
+
+struct sctp_fwdtsn_hdr {
+ __be32 new_cum_tsn;
+};
+
+struct sctp_ifwdtsn_hdr {
+ __be32 new_cum_tsn;
+};
+
+struct sctp_addip_param {
+ struct sctp_paramhdr param_hdr;
+ __be32 crr_id;
+};
+
+struct sctp_addiphdr {
+ __be32 serial;
+};
+
+struct sctp_authhdr {
+ __be16 shkey_id;
+ __be16 hmac_id;
+};
+
+struct sctp_auth_bytes {
+ refcount_t refcnt;
+ __u32 len;
+ __u8 data[0];
+};
+
+struct sctp_shared_key {
+ struct list_head key_list;
+ struct sctp_auth_bytes *key;
+ refcount_t refcnt;
+ __u16 key_id;
+ __u8 deactivated;
+};
+
+enum {
+ SCTP_MAX_STREAM = 65535,
+};
+
+enum sctp_event_timeout {
+ SCTP_EVENT_TIMEOUT_NONE = 0,
+ SCTP_EVENT_TIMEOUT_T1_COOKIE = 1,
+ SCTP_EVENT_TIMEOUT_T1_INIT = 2,
+ SCTP_EVENT_TIMEOUT_T2_SHUTDOWN = 3,
+ SCTP_EVENT_TIMEOUT_T3_RTX = 4,
+ SCTP_EVENT_TIMEOUT_T4_RTO = 5,
+ SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD = 6,
+ SCTP_EVENT_TIMEOUT_HEARTBEAT = 7,
+ SCTP_EVENT_TIMEOUT_RECONF = 8,
+ SCTP_EVENT_TIMEOUT_PROBE = 9,
+ SCTP_EVENT_TIMEOUT_SACK = 10,
+ SCTP_EVENT_TIMEOUT_AUTOCLOSE = 11,
+};
+
+enum {
+ SCTP_MAX_DUP_TSNS = 16,
+};
+
+enum sctp_scope {
+ SCTP_SCOPE_GLOBAL = 0,
+ SCTP_SCOPE_PRIVATE = 1,
+ SCTP_SCOPE_LINK = 2,
+ SCTP_SCOPE_LOOPBACK = 3,
+ SCTP_SCOPE_UNUSABLE = 4,
+};
+
+enum {
+ SCTP_AUTH_HMAC_ID_RESERVED_0 = 0,
+ SCTP_AUTH_HMAC_ID_SHA1 = 1,
+ SCTP_AUTH_HMAC_ID_RESERVED_2 = 2,
+ SCTP_AUTH_HMAC_ID_SHA256 = 3,
+ __SCTP_AUTH_HMAC_MAX = 4,
+};
+
+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));
+
+union sctp_addr_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_sender_hb_info;
+
+struct sctp_signed_cookie;
+
+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;
+ long unsigned int 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_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 *);
+};
+
+struct sctp_bind_bucket {
+ short unsigned int port;
+ signed char fastreuse;
+ signed char fastreuseport;
+ kuid_t fastuid;
+ struct hlist_node node;
+ struct hlist_head owner;
+ struct net *net;
+};
+
+enum sctp_socket_type {
+ SCTP_SOCKET_UDP = 0,
+ SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,
+ SCTP_SOCKET_TCP = 2,
+};
+
+struct sctp_pf;
+
+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 sctp_af;
+
+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_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_signed_cookie {
+ __u8 signature[32];
+ __u32 __pad;
+ struct sctp_cookie c;
+} __attribute__((packed));
+
+union sctp_addr_param {
+ struct sctp_paramhdr p;
+ struct sctp_ipv4addr_param v4;
+ struct sctp_ipv6addr_param v6;
+};
+
+struct sctp_sender_hb_info {
+ struct sctp_paramhdr param_hdr;
+ union sctp_addr daddr;
+ long unsigned int sent_at;
+ __u64 hb_nonce;
+ __u32 probe_size;
+};
+
+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 *, int *);
+ 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 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_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;
+ long unsigned int 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;
+ long unsigned int hbinterval;
+ long unsigned int probe_interval;
+ long unsigned int sackdelay;
+ __u32 sackfreq;
+ atomic_t mtu_info;
+ ktime_t last_time_heard;
+ long unsigned int last_time_sent;
+ long unsigned int 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;
+ short unsigned int 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;
+};
+
+struct sctp_datamsg {
+ struct list_head chunks;
+ refcount_t refcnt;
+ long unsigned int expires_at;
+ int send_error;
+ u8 send_failed: 1;
+ u8 can_delay: 1;
+ u8 abandoned: 1;
+};
+
+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_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 audit_field {
+ u32 type;
+ union {
+ u32 val;
+ kuid_t uid;
+ kgid_t gid;
+ struct {
+ char *lsm_str;
+ void *lsm_rule;
+ };
+ };
+ u32 op;
+};
+
+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;
+ struct {
+ __u32 level;
+ __u32 optname;
+ };
+ };
+ __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;
+ __u32 waitid_flags;
+ __u32 futex_flags;
+ __u32 install_fd_flags;
+ __u32 nop_flags;
+ };
+ __u64 user_data;
+ union {
+ __u16 buf_index;
+ __u16 buf_group;
+ };
+ __u16 personality;
+ union {
+ __s32 splice_fd_in;
+ __u32 file_index;
+ __u32 optlen;
+ struct {
+ __u16 addr_len;
+ __u16 __pad3[1];
+ };
+ };
+ union {
+ struct {
+ __u64 addr3;
+ __u64 __pad2[1];
+ };
+ __u64 optval;
+ __u8 cmd[0];
+ };
+};
+
+enum io_uring_sqe_flags_bit {
+ 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_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_READ_MULTISHOT = 49,
+ IORING_OP_WAITID = 50,
+ IORING_OP_FUTEX_WAIT = 51,
+ IORING_OP_FUTEX_WAKE = 52,
+ IORING_OP_FUTEX_WAITV = 53,
+ IORING_OP_FIXED_FD_INSTALL = 54,
+ IORING_OP_FTRUNCATE = 55,
+ IORING_OP_BIND = 56,
+ IORING_OP_LISTEN = 57,
+ IORING_OP_LAST = 58,
+};
+
+struct io_uring_cqe {
+ __u64 user_data;
+ __s32 res;
+ __u32 flags;
+ __u64 big_cqe[0];
+};
+
+enum io_uring_register_op {
+ 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_PBUF_STATUS = 26,
+ IORING_REGISTER_NAPI = 27,
+ IORING_UNREGISTER_NAPI = 28,
+ IORING_REGISTER_CLOCK = 29,
+ IORING_REGISTER_CLONE_BUFFERS = 30,
+ IORING_REGISTER_LAST = 31,
+ IORING_REGISTER_USE_REGISTERED_RING = 2147483648,
+};
+
+enum task_work_notify_mode {
+ TWA_NONE = 0,
+ TWA_RESUME = 1,
+ TWA_SIGNAL = 2,
+ TWA_SIGNAL_NO_IPI = 3,
+ TWA_NMI_CURRENT = 4,
+ TWA_FLAGS = 65280,
+ TWAF_NO_ALLOC = 256,
+};
+
+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_wq_work {
+ struct io_wq_work_node list;
+ atomic_t flags;
+ int cancel_seq;
+};
+
+struct io_fixed_file {
+ long unsigned int file_ptr;
+};
+
+struct io_file_table {
+ struct io_fixed_file *files;
+ long unsigned int *bitmap;
+ unsigned int alloc_hint;
+};
+
+struct io_hash_bucket {
+ spinlock_t lock;
+ struct hlist_head list;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct io_hash_table {
+ struct io_hash_bucket *hbs;
+ unsigned int hash_bits;
+};
+
+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;
+ bool cq_flush;
+ short unsigned int submit_nr;
+ struct blk_plug plug;
+};
+
+struct io_alloc_cache {
+ void **entries;
+ unsigned int nr_cached;
+ unsigned int max_cached;
+ size_t elem_size;
+};
+
+struct io_restriction {
+ long unsigned int register_op[1];
+ long unsigned int 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;
+ unsigned int iowq_limits_set: 1;
+ struct task_struct *submitter_task;
+ struct io_rings *rings;
+ struct percpu_ref refs;
+ clockid_t clockid;
+ enum tk_offsets clock_offset;
+ enum task_work_notify_mode notify_method;
+ unsigned int sq_thread_idle;
+ 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;
+ bool poll_multi_queue;
+ struct io_wq_work_list iopoll_list;
+ struct io_file_table file_table;
+ struct io_mapped_ubuf **user_bufs;
+ unsigned int nr_user_files;
+ unsigned int nr_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_alloc_cache rw_cache;
+ struct io_alloc_cache uring_cache;
+ struct hlist_head cancelable_uring_cmd;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ };
+ 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 *io_ev_fd;
+ unsigned int cq_extra;
+ long: 64;
+ long: 64;
+ long: 64;
+ };
+ struct {
+ struct llist_head work_llist;
+ long unsigned int check_cq;
+ atomic_t cq_wait_nr;
+ atomic_t cq_timeouts;
+ struct wait_queue_head cq_wait;
+ };
+ struct {
+ spinlock_t timeout_lock;
+ struct list_head timeout_list;
+ struct list_head ltimeout_list;
+ unsigned int cq_last_tm_flush;
+ };
+ spinlock_t completion_lock;
+ struct list_head io_buffers_comp;
+ struct list_head cq_overflow_list;
+ struct io_hash_table cancel_table;
+ struct hlist_head waitid_list;
+ struct hlist_head futex_list;
+ struct io_alloc_cache futex_cache;
+ 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 list_head io_buffers_cache;
+ struct wait_queue_head poll_wq;
+ struct io_restriction restrictions;
+ 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;
+ u32 pers_next;
+ struct xarray personalities;
+ 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];
+ struct callback_head poll_wq_task_work;
+ struct list_head defer_list;
+ struct io_alloc_cache msg_cache;
+ spinlock_t msg_lock;
+ struct list_head napi_list;
+ spinlock_t napi_lock;
+ ktime_t napi_busy_poll_dt;
+ bool napi_prefer_busy_poll;
+ bool napi_enabled;
+ struct hlist_head napi_ht[16];
+ unsigned int evfd_last_cq_tail;
+ short unsigned int n_ring_pages;
+ short unsigned int n_sqe_pages;
+ struct page **ring_pages;
+ struct page **sqe_pages;
+ long: 64;
+ long: 64;
+ long: 64;
+ 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_cmd_data {
+ struct file *file;
+ __u8 data[56];
+};
+
+typedef u64 io_req_flags_t;
+
+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_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 nr_tw;
+ io_req_flags_t flags;
+ struct io_cqe cqe;
+ struct io_ring_ctx *ctx;
+ struct task_struct *task;
+ 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;
+ };
+ struct io_rsrc_node *rsrc_node;
+ atomic_t refs;
+ bool cancel_seq_set;
+ struct io_task_work io_task_work;
+ struct hlist_node hash_node;
+ struct async_poll *apoll;
+ void *async_data;
+ atomic_t poll_refs;
+ struct io_kiocb *link;
+ const struct cred *creds;
+ struct io_wq_work work;
+ struct {
+ u64 extra1;
+ u64 extra2;
+ } big_cqe;
+};
+
+struct io_tw_state {};
+
+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_APOLL_MULTISHOT_BIT = 25,
+ REQ_F_CLEAR_POLLIN_BIT = 26,
+ REQ_F_HASH_LOCKED_BIT = 27,
+ REQ_F_SUPPORT_NOWAIT_BIT = 28,
+ REQ_F_ISREG_BIT = 29,
+ REQ_F_POLL_NO_LAZY_BIT = 30,
+ REQ_F_CAN_POLL_BIT = 31,
+ REQ_F_BL_EMPTY_BIT = 32,
+ REQ_F_BL_NO_RECYCLE_BIT = 33,
+ REQ_F_BUFFERS_COMMIT_BIT = 34,
+ __REQ_F_LAST_BIT = 35,
+};
+
+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_wolinfo {
+ __u32 cmd;
+ __u32 supported;
+ __u32 wolopts;
+ __u8 sopass[6];
+};
+
+struct ethtool_tunable {
+ __u32 cmd;
+ __u32 id;
+ __u32 type_id;
+ __u32 len;
+ void *data[0];
+};
+
+struct ethtool_regs {
+ __u32 cmd;
+ __u32 version;
+ __u32 len;
+ __u8 data[0];
+};
+
+struct ethtool_eeprom {
+ __u32 cmd;
+ __u32 magic;
+ __u32 offset;
+ __u32 len;
+ __u8 data[0];
+};
+
+struct ethtool_modinfo {
+ __u32 cmd;
+ __u32 type;
+ __u32 eeprom_len;
+ __u32 reserved[8];
+};
+
+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 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 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_pauseparam {
+ __u32 cmd;
+ __u32 autoneg;
+ __u32 rx_pause;
+ __u32 tx_pause;
+};
+
+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,
+};
+
+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_mac_stats_src {
+ ETHTOOL_MAC_STATS_SRC_AGGREGATE = 0,
+ ETHTOOL_MAC_STATS_SRC_EMAC = 1,
+ ETHTOOL_MAC_STATS_SRC_PMAC = 2,
+};
+
+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,
+};
+
+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_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;
+};
+
+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_dump {
+ __u32 cmd;
+ __u32 version;
+ __u32 flag;
+ __u32 len;
+ __u8 data[0];
+};
+
+struct ethtool_fecparam {
+ __u32 cmd;
+ __u32 active_fec;
+ __u32 fec;
+ __u32 reserved;
+};
+
+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_10baseT1BRR_Full_BIT = 102,
+ __ETHTOOL_LINK_MODE_MASK_NBITS = 103,
+};
+
+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 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;
+};
+
+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_rxfh_context {
+ u32 indir_size;
+ u32 key_size;
+ u16 priv_size;
+ u8 hfunc;
+ u8 input_xfrm;
+ u8 indir_configured: 1;
+ u8 key_configured: 1;
+ u32 key_off;
+ long: 0;
+ u8 data[0];
+};
+
+struct ethtool_link_ksettings {
+ struct ethtool_link_settings base;
+ struct {
+ long unsigned int supported[2];
+ long unsigned int advertising[2];
+ long unsigned int lp_advertising[2];
+ } link_modes;
+ u32 lanes;
+};
+
+struct ethtool_keee {
+ long unsigned int supported[2];
+ long unsigned int advertised[2];
+ long unsigned int lp_advertised[2];
+ u32 tx_lpi_timer;
+ bool tx_lpi_enabled;
+ bool eee_active;
+ bool eee_enabled;
+};
+
+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_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_phy_stats {
+ enum ethtool_mac_stats_src src;
+ union {
+ struct {
+ u64 SymbolErrorDuringCarrier;
+ };
+ struct {
+ u64 SymbolErrorDuringCarrier;
+ } 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_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_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_rmon_hist_range {
+ u16 low;
+ u16 high;
+};
+
+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_ts_stats {
+ union {
+ struct {
+ u64 pkts;
+ u64 lost;
+ u64 err;
+ };
+ struct {
+ u64 pkts;
+ u64 lost;
+ u64 err;
+ } tx_stats;
+ };
+};
+
+struct ethtool_module_eeprom {
+ u32 offset;
+ u32 length;
+ u8 page;
+ u8 bank;
+ u8 i2c_address;
+ u8 *data;
+};
+
+struct ethtool_module_power_mode_params {
+ enum ethtool_module_power_mode_policy policy;
+ enum ethtool_module_power_mode mode;
+};
+
+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 ethtool_rxfh_param {
+ u8 hfunc;
+ u32 indir_size;
+ u32 *indir;
+ u32 key_size;
+ u8 *key;
+ u32 rss_context;
+ u8 rss_delete;
+ u8 input_xfrm;
+};
+
+struct kernel_ethtool_ts_info {
+ u32 cmd;
+ u32 so_timestamping;
+ int phc_index;
+ enum hwtstamp_tx_types tx_types;
+ enum hwtstamp_rx_filters rx_filters;
+};
+
+struct dim_cq_moder {
+ u16 usec;
+ u16 pkts;
+ u16 comps;
+ u8 cq_period_mode;
+ struct callback_head rcu;
+};
+
+enum ib_uverbs_write_cmds {
+ IB_USER_VERBS_CMD_GET_CONTEXT = 0,
+ IB_USER_VERBS_CMD_QUERY_DEVICE = 1,
+ IB_USER_VERBS_CMD_QUERY_PORT = 2,
+ IB_USER_VERBS_CMD_ALLOC_PD = 3,
+ IB_USER_VERBS_CMD_DEALLOC_PD = 4,
+ IB_USER_VERBS_CMD_CREATE_AH = 5,
+ IB_USER_VERBS_CMD_MODIFY_AH = 6,
+ IB_USER_VERBS_CMD_QUERY_AH = 7,
+ IB_USER_VERBS_CMD_DESTROY_AH = 8,
+ IB_USER_VERBS_CMD_REG_MR = 9,
+ IB_USER_VERBS_CMD_REG_SMR = 10,
+ IB_USER_VERBS_CMD_REREG_MR = 11,
+ IB_USER_VERBS_CMD_QUERY_MR = 12,
+ IB_USER_VERBS_CMD_DEREG_MR = 13,
+ IB_USER_VERBS_CMD_ALLOC_MW = 14,
+ IB_USER_VERBS_CMD_BIND_MW = 15,
+ IB_USER_VERBS_CMD_DEALLOC_MW = 16,
+ IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL = 17,
+ IB_USER_VERBS_CMD_CREATE_CQ = 18,
+ IB_USER_VERBS_CMD_RESIZE_CQ = 19,
+ IB_USER_VERBS_CMD_DESTROY_CQ = 20,
+ IB_USER_VERBS_CMD_POLL_CQ = 21,
+ IB_USER_VERBS_CMD_PEEK_CQ = 22,
+ IB_USER_VERBS_CMD_REQ_NOTIFY_CQ = 23,
+ IB_USER_VERBS_CMD_CREATE_QP = 24,
+ IB_USER_VERBS_CMD_QUERY_QP = 25,
+ IB_USER_VERBS_CMD_MODIFY_QP = 26,
+ IB_USER_VERBS_CMD_DESTROY_QP = 27,
+ IB_USER_VERBS_CMD_POST_SEND = 28,
+ IB_USER_VERBS_CMD_POST_RECV = 29,
+ IB_USER_VERBS_CMD_ATTACH_MCAST = 30,
+ IB_USER_VERBS_CMD_DETACH_MCAST = 31,
+ IB_USER_VERBS_CMD_CREATE_SRQ = 32,
+ IB_USER_VERBS_CMD_MODIFY_SRQ = 33,
+ IB_USER_VERBS_CMD_QUERY_SRQ = 34,
+ IB_USER_VERBS_CMD_DESTROY_SRQ = 35,
+ IB_USER_VERBS_CMD_POST_SRQ_RECV = 36,
+ IB_USER_VERBS_CMD_OPEN_XRCD = 37,
+ IB_USER_VERBS_CMD_CLOSE_XRCD = 38,
+ IB_USER_VERBS_CMD_CREATE_XSRQ = 39,
+ IB_USER_VERBS_CMD_OPEN_QP = 40,
+};
+
+enum ib_uverbs_wc_opcode {
+ IB_UVERBS_WC_SEND = 0,
+ IB_UVERBS_WC_RDMA_WRITE = 1,
+ IB_UVERBS_WC_RDMA_READ = 2,
+ IB_UVERBS_WC_COMP_SWAP = 3,
+ IB_UVERBS_WC_FETCH_ADD = 4,
+ IB_UVERBS_WC_BIND_MW = 5,
+ IB_UVERBS_WC_LOCAL_INV = 6,
+ IB_UVERBS_WC_TSO = 7,
+ IB_UVERBS_WC_FLUSH = 8,
+ IB_UVERBS_WC_ATOMIC_WRITE = 9,
+};
+
+enum ib_uverbs_create_qp_mask {
+ IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1,
+};
+
+enum ib_uverbs_wr_opcode {
+ IB_UVERBS_WR_RDMA_WRITE = 0,
+ IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
+ IB_UVERBS_WR_SEND = 2,
+ IB_UVERBS_WR_SEND_WITH_IMM = 3,
+ IB_UVERBS_WR_RDMA_READ = 4,
+ IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
+ IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
+ IB_UVERBS_WR_LOCAL_INV = 7,
+ IB_UVERBS_WR_BIND_MW = 8,
+ IB_UVERBS_WR_SEND_WITH_INV = 9,
+ IB_UVERBS_WR_TSO = 10,
+ IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
+ IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+ IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+ IB_UVERBS_WR_FLUSH = 14,
+ IB_UVERBS_WR_ATOMIC_WRITE = 15,
+};
+
+enum ib_uverbs_device_cap_flags {
+ IB_UVERBS_DEVICE_RESIZE_MAX_WR = 1ULL,
+ IB_UVERBS_DEVICE_BAD_PKEY_CNTR = 2ULL,
+ IB_UVERBS_DEVICE_BAD_QKEY_CNTR = 4ULL,
+ IB_UVERBS_DEVICE_RAW_MULTI = 8ULL,
+ IB_UVERBS_DEVICE_AUTO_PATH_MIG = 16ULL,
+ IB_UVERBS_DEVICE_CHANGE_PHY_PORT = 32ULL,
+ IB_UVERBS_DEVICE_UD_AV_PORT_ENFORCE = 64ULL,
+ IB_UVERBS_DEVICE_CURR_QP_STATE_MOD = 128ULL,
+ IB_UVERBS_DEVICE_SHUTDOWN_PORT = 256ULL,
+ IB_UVERBS_DEVICE_PORT_ACTIVE_EVENT = 1024ULL,
+ IB_UVERBS_DEVICE_SYS_IMAGE_GUID = 2048ULL,
+ IB_UVERBS_DEVICE_RC_RNR_NAK_GEN = 4096ULL,
+ IB_UVERBS_DEVICE_SRQ_RESIZE = 8192ULL,
+ IB_UVERBS_DEVICE_N_NOTIFY_CQ = 16384ULL,
+ IB_UVERBS_DEVICE_MEM_WINDOW = 131072ULL,
+ IB_UVERBS_DEVICE_UD_IP_CSUM = 262144ULL,
+ IB_UVERBS_DEVICE_XRC = 1048576ULL,
+ IB_UVERBS_DEVICE_MEM_MGT_EXTENSIONS = 2097152ULL,
+ IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2A = 8388608ULL,
+ IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2B = 16777216ULL,
+ IB_UVERBS_DEVICE_RC_IP_CSUM = 33554432ULL,
+ IB_UVERBS_DEVICE_RAW_IP_CSUM = 67108864ULL,
+ IB_UVERBS_DEVICE_MANAGED_FLOW_STEERING = 536870912ULL,
+ IB_UVERBS_DEVICE_RAW_SCATTER_FCS = 17179869184ULL,
+ IB_UVERBS_DEVICE_PCI_WRITE_END_PADDING = 68719476736ULL,
+ IB_UVERBS_DEVICE_FLUSH_GLOBAL = 274877906944ULL,
+ IB_UVERBS_DEVICE_FLUSH_PERSISTENT = 549755813888ULL,
+ IB_UVERBS_DEVICE_ATOMIC_WRITE = 1099511627776ULL,
+};
+
+enum ib_uverbs_raw_packet_caps {
+ IB_UVERBS_RAW_PACKET_CAP_CVLAN_STRIPPING = 1,
+ IB_UVERBS_RAW_PACKET_CAP_SCATTER_FCS = 2,
+ IB_UVERBS_RAW_PACKET_CAP_IP_CSUM = 4,
+ IB_UVERBS_RAW_PACKET_CAP_DELAY_DROP = 8,
+};
+
+enum ib_uverbs_access_flags {
+ IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
+ IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
+ IB_UVERBS_ACCESS_REMOTE_READ = 4,
+ IB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,
+ IB_UVERBS_ACCESS_MW_BIND = 16,
+ IB_UVERBS_ACCESS_ZERO_BASED = 32,
+ IB_UVERBS_ACCESS_ON_DEMAND = 64,
+ IB_UVERBS_ACCESS_HUGETLB = 128,
+ IB_UVERBS_ACCESS_FLUSH_GLOBAL = 256,
+ IB_UVERBS_ACCESS_FLUSH_PERSISTENT = 512,
+ IB_UVERBS_ACCESS_RELAXED_ORDERING = 1048576,
+ IB_UVERBS_ACCESS_OPTIONAL_RANGE = 1072693248,
+};
+
+enum ib_uverbs_srq_type {
+ IB_UVERBS_SRQT_BASIC = 0,
+ IB_UVERBS_SRQT_XRC = 1,
+ IB_UVERBS_SRQT_TM = 2,
+};
+
+enum ib_uverbs_wq_type {
+ IB_UVERBS_WQT_RQ = 0,
+};
+
+enum ib_uverbs_wq_flags {
+ IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1,
+ IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 2,
+ IB_UVERBS_WQ_FLAGS_DELAY_DROP = 4,
+ IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 8,
+};
+
+enum ib_uverbs_qp_type {
+ IB_UVERBS_QPT_RC = 2,
+ IB_UVERBS_QPT_UC = 3,
+ IB_UVERBS_QPT_UD = 4,
+ IB_UVERBS_QPT_RAW_PACKET = 8,
+ IB_UVERBS_QPT_XRC_INI = 9,
+ IB_UVERBS_QPT_XRC_TGT = 10,
+ IB_UVERBS_QPT_DRIVER = 255,
+};
+
+enum ib_uverbs_qp_create_flags {
+ IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 2,
+ IB_UVERBS_QP_CREATE_SCATTER_FCS = 256,
+ IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 512,
+ IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 2048,
+ IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 4096,
+};
+
+enum ib_uverbs_gid_type {
+ IB_UVERBS_GID_TYPE_IB = 0,
+ IB_UVERBS_GID_TYPE_ROCE_V1 = 1,
+ IB_UVERBS_GID_TYPE_ROCE_V2 = 2,
+};
+
+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 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 selinux_audit_data {
+ u32 ssid;
+ u32 tsid;
+ u16 tclass;
+ u32 requested;
+ u32 audited;
+ u32 denied;
+ int result;
+};
+
+struct apparmor_audit_data;
+
+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 apparmor_audit_data *apparmor_audit_data;
+ };
+};
+
+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_USERSPACE_INITIAL_CONTEXT = 8,
+ __POLICYDB_CAP_MAX = 9,
+};
+
+struct selinux_policy;
+
+struct selinux_state {
+ bool enforcing;
+ bool initialized;
+ bool policycap[9];
+ struct page *status_page;
+ struct mutex status_lock;
+ struct selinux_policy *policy;
+ struct mutex policy_mutex;
+};
+
+struct av_decision {
+ u32 allowed;
+ u32 auditallow;
+ u32 auditdeny;
+ u32 seqno;
+ u32 flags;
+};
+
+struct task_security_struct {
+ u32 osid;
+ u32 sid;
+ u32 exec_sid;
+ u32 create_sid;
+ u32 keycreate_sid;
+ u32 sockcreate_sid;
+};
+
+enum label_initialized {
+ LABEL_INVALID = 0,
+ LABEL_INITIALIZED = 1,
+ LABEL_PENDING = 2,
+};
+
+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 file_security_struct {
+ u32 sid;
+ u32 fown_sid;
+ u32 isid;
+ u32 pseqno;
+};
+
+struct superblock_security_struct {
+ u32 sid;
+ u32 def_sid;
+ u32 mntpoint_sid;
+ short unsigned int behavior;
+ short unsigned int flags;
+ struct mutex lock;
+ struct list_head isec_head;
+ spinlock_t isec_lock;
+};
+
+struct msg_security_struct {
+ u32 sid;
+};
+
+struct ipc_security_struct {
+ u16 sclass;
+ u32 sid;
+};
+
+struct sk_security_struct {
+ u32 sid;
+ u32 peer_sid;
+ u16 sclass;
+ enum {
+ SCTP_ASSOC_UNSET = 0,
+ SCTP_ASSOC_SET = 1,
+ } sctp_assoc_state;
+};
+
+struct tun_security_struct {
+ u32 sid;
+};
+
+struct key_security_struct {
+ u32 sid;
+};
+
+struct bpf_security_struct {
+ u32 sid;
+};
+
+struct perf_event_security_struct {
+ u32 sid;
+};
+
+struct rt6_exception_bucket {
+ struct hlist_head chain;
+ int depth;
+};
+
+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 security_class_mapping {
+ const char *name;
+ const char *perms[33];
+};
+
+struct selinux_mnt_opts {
+ u32 fscontext_sid;
+ u32 context_sid;
+ u32 rootcontext_sid;
+ u32 defcontext_sid;
+};
+
+enum {
+ Opt_error = -1,
+ Opt_context = 0,
+ Opt_defcontext = 1,
+ Opt_fscontext = 2,
+ Opt_rootcontext = 3,
+ Opt_seclabel = 4,
+};
+
+struct sockaddr_un {
+ __kernel_sa_family_t sun_family;
+ char sun_path[108];
+};
+
+struct unix_vertex {
+ struct list_head edges;
+ struct list_head entry;
+ struct list_head scc_entry;
+ long unsigned int out_degree;
+ long unsigned int index;
+ long unsigned int scc_index;
+};
+
+struct scm_stat {
+ atomic_t nr_fds;
+ long unsigned int nr_unix_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 sock *listener;
+ struct unix_vertex *vertex;
+ spinlock_t lock;
+ long: 64;
+ struct socket_wq peer_wq;
+ wait_queue_entry_t peer_wake;
+ struct scm_stat scm_stat;
+ struct sk_buff *oob_skb;
+};
+
+struct unix_address {
+ refcount_t refcnt;
+ int len;
+ struct sockaddr_un name[0];
+};
+
+struct aa_label;
+
+struct aa_profile;
+
+struct apparmor_audit_data {
+ int error;
+ int type;
+ u16 class;
+ const char *op;
+ const struct cred *subj_cred;
+ struct aa_label *subj_label;
+ const char *name;
+ const char *info;
+ u32 request;
+ u32 denied;
+ union {
+ struct {
+ struct aa_label *peer;
+ union {
+ struct {
+ const char *target;
+ kuid_t ouid;
+ } fs;
+ struct {
+ int rlim;
+ long unsigned int max;
+ } rlim;
+ struct {
+ int signal;
+ int unmappedsig;
+ };
+ struct {
+ int type;
+ int protocol;
+ struct sock *peer_sk;
+ void *addr;
+ int addrlen;
+ } net;
+ };
+ };
+ struct {
+ struct aa_profile *profile;
+ const char *ns;
+ long int pos;
+ } iface;
+ struct {
+ const char *src_name;
+ const char *type;
+ const char *trans;
+ const char *data;
+ long unsigned int flags;
+ } mnt;
+ struct {
+ struct aa_label *target;
+ } uring;
+ };
+ struct common_audit_data common;
+};
+
+enum audit_mode {
+ AUDIT_NORMAL = 0,
+ AUDIT_QUIET_DENIED = 1,
+ AUDIT_QUIET = 2,
+ AUDIT_NOQUIET = 3,
+ AUDIT_ALL = 4,
+};
+
+struct table_header {
+ u16 td_id;
+ u16 td_flags;
+ u32 td_hilen;
+ u32 td_lolen;
+ char td_data[0];
+};
+
+struct aa_dfa {
+ struct kref count;
+ u16 flags;
+ u32 max_oob;
+ struct table_header *tables[8];
+};
+
+struct aa_str_table {
+ int size;
+ char **table;
+};
+
+struct counted_str {
+ struct kref count;
+ char name[0];
+};
+
+struct aa_policy {
+ const char *name;
+ char *hname;
+ struct list_head list;
+ struct list_head profiles;
+};
+
+struct aa_proxy {
+ struct kref count;
+ struct aa_label *label;
+};
+
+struct aa_label {
+ struct kref count;
+ struct rb_node node;
+ struct callback_head rcu;
+ struct aa_proxy *proxy;
+ char *hname;
+ long int flags;
+ u32 secid;
+ int size;
+ struct aa_profile *vec[0];
+};
+
+struct aa_policydb;
+
+struct aa_attachment {
+ const char *xmatch_str;
+ struct aa_policydb *xmatch;
+ unsigned int xmatch_len;
+ int xattr_count;
+ char **xattrs;
+};
+
+struct aa_ns;
+
+struct aa_loaddata;
+
+struct aa_profile {
+ struct aa_policy base;
+ struct aa_profile *parent;
+ struct aa_ns *ns;
+ const char *rename;
+ enum audit_mode audit;
+ long int mode;
+ u32 path_flags;
+ const char *disconnected;
+ struct aa_attachment attach;
+ struct list_head rules;
+ struct aa_loaddata *rawdata;
+ unsigned char *hash;
+ char *dirname;
+ struct dentry *dents[9];
+ struct rhashtable *data;
+ struct aa_label label;
+};
+
+struct aa_perms {
+ u32 allow;
+ u32 deny;
+ u32 subtree;
+ u32 cond;
+ u32 kill;
+ u32 complain;
+ u32 prompt;
+ u32 audit;
+ u32 quiet;
+ u32 hide;
+ u32 xindex;
+ u32 tag;
+ u32 label;
+};
+
+enum audit_type {
+ AUDIT_APPARMOR_AUDIT = 0,
+ AUDIT_APPARMOR_ALLOWED = 1,
+ AUDIT_APPARMOR_DENIED = 2,
+ AUDIT_APPARMOR_HINT = 3,
+ AUDIT_APPARMOR_STATUS = 4,
+ AUDIT_APPARMOR_ERROR = 5,
+ AUDIT_APPARMOR_KILL = 6,
+ AUDIT_APPARMOR_AUTO = 7,
+};
+
+enum aafs_prof_type {
+ AAFS_PROF_DIR = 0,
+ AAFS_PROF_PROFS = 1,
+ AAFS_PROF_NAME = 2,
+ AAFS_PROF_MODE = 3,
+ AAFS_PROF_ATTACH = 4,
+ AAFS_PROF_HASH = 5,
+ AAFS_PROF_RAW_DATA = 6,
+ AAFS_PROF_RAW_HASH = 7,
+ AAFS_PROF_RAW_ABI = 8,
+ AAFS_PROF_SIZEOF = 9,
+};
+
+struct aa_caps {
+ kernel_cap_t allow;
+ kernel_cap_t audit;
+ kernel_cap_t denied;
+ kernel_cap_t quiet;
+ kernel_cap_t kill;
+ kernel_cap_t extended;
+};
+
+struct aa_secmark {
+ u8 audit;
+ u8 deny;
+ u32 secid;
+ char *label;
+};
+
+struct aa_rlimit {
+ unsigned int mask;
+ struct rlimit limits[16];
+};
+
+enum profile_mode {
+ APPARMOR_ENFORCE = 0,
+ APPARMOR_COMPLAIN = 1,
+ APPARMOR_KILL = 2,
+ APPARMOR_UNCONFINED = 3,
+ APPARMOR_USER = 4,
+};
+
+struct aa_policydb {
+ struct kref count;
+ struct aa_dfa *dfa;
+ struct {
+ struct aa_perms *perms;
+ u32 size;
+ };
+ struct aa_str_table trans;
+ unsigned int start[33];
+};
+
+struct aa_ruleset {
+ struct list_head list;
+ int size;
+ struct aa_policydb *policy;
+ struct aa_policydb *file;
+ struct aa_caps caps;
+ struct aa_rlimit rlimits;
+ int secmark_count;
+ struct aa_secmark *secmark;
+};
+
+struct xa_limit {
+ u32 max;
+ u32 min;
+};
+
+enum xa_lock_type {
+ XA_LOCK_IRQ = 1,
+ XA_LOCK_BH = 2,
+};
+
+struct aa_labelset {
+ rwlock_t lock;
+ struct rb_root root;
+};
+
+enum aafs_ns_type {
+ AAFS_NS_DIR = 0,
+ AAFS_NS_PROFS = 1,
+ AAFS_NS_NS = 2,
+ AAFS_NS_RAW_DATA = 3,
+ AAFS_NS_LOAD = 4,
+ AAFS_NS_REPLACE = 5,
+ AAFS_NS_REMOVE = 6,
+ AAFS_NS_REVISION = 7,
+ AAFS_NS_COUNT = 8,
+ AAFS_NS_MAX_COUNT = 9,
+ AAFS_NS_SIZE = 10,
+ AAFS_NS_MAX_SIZE = 11,
+ AAFS_NS_OWNER = 12,
+ AAFS_NS_SIZEOF = 13,
+};
+
+struct aa_ns_acct {
+ int max_size;
+ int max_count;
+ int size;
+ int count;
+};
+
+struct aa_ns {
+ struct aa_policy base;
+ struct aa_ns *parent;
+ struct mutex lock;
+ struct aa_ns_acct acct;
+ struct aa_profile *unconfined;
+ struct list_head sub_ns;
+ atomic_t uniq_null;
+ long int uniq_id;
+ int level;
+ long int revision;
+ wait_queue_head_t wait;
+ struct aa_labelset labels;
+ struct list_head rawdata_list;
+ struct dentry *dents[13];
+};
+
+struct crypto_wait {
+ struct completion completion;
+ int err;
+};
+
+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 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 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];
+};
+
+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;
+};
+
+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];
+};
+
+struct crypto_aead;
+
+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 scatter_walk {
+ struct scatterlist *sg;
+ unsigned int offset;
+};
+
+struct crypto_cipher {
+ struct crypto_tfm base;
+};
+
+struct crypto_cipher_spawn {
+ struct crypto_spawn base;
+};
+
+struct skcipher_request {
+ unsigned int cryptlen;
+ u8 *iv;
+ struct scatterlist *src;
+ struct scatterlist *dst;
+ struct crypto_async_request base;
+ void *__ctx[0];
+};
+
+struct crypto_skcipher {
+ unsigned int reqsize;
+ struct crypto_tfm base;
+};
+
+struct crypto_sync_skcipher {
+ struct crypto_skcipher base;
+};
+
+struct crypto_lskcipher {
+ struct crypto_tfm base;
+};
+
+struct skcipher_alg_common {
+ unsigned int min_keysize;
+ unsigned int max_keysize;
+ unsigned int ivsize;
+ unsigned int chunksize;
+ unsigned int statesize;
+ struct crypto_alg base;
+};
+
+struct skcipher_alg {
+ int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
+ int (*encrypt)(struct skcipher_request *);
+ int (*decrypt)(struct skcipher_request *);
+ int (*export)(struct skcipher_request *, void *);
+ int (*import)(struct skcipher_request *, const void *);
+ int (*init)(struct crypto_skcipher *);
+ void (*exit)(struct crypto_skcipher *);
+ unsigned int walksize;
+ union {
+ struct {
+ unsigned int min_keysize;
+ unsigned int max_keysize;
+ unsigned int ivsize;
+ unsigned int chunksize;
+ unsigned int statesize;
+ struct crypto_alg base;
+ };
+ struct skcipher_alg_common co;
+ };
+};
+
+struct skcipher_instance {
+ void (*free)(struct skcipher_instance *);
+ union {
+ struct {
+ char head[88];
+ struct crypto_instance base;
+ } s;
+ struct skcipher_alg alg;
+ };
+};
+
+struct crypto_skcipher_spawn {
+ struct crypto_spawn base;
+};
+
+struct skcipher_walk {
+ union {
+ struct {
+ struct page *page;
+ long unsigned int offset;
+ } phys;
+ struct {
+ u8 *page;
+ void *addr;
+ } virt;
+ } src;
+ union {
+ struct {
+ struct page *page;
+ long unsigned int 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 skcipher_ctx_simple {
+ struct crypto_cipher *cipher;
+};
+
+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 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;
+};
+
+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 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 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 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 disk_stats {
+ u64 nsecs[4];
+ long unsigned int sectors[4];
+ long unsigned int ios[4];
+ long unsigned int merges[4];
+ long unsigned int io_ticks;
+ local_t in_flight[2];
+};
+
+enum stat_group {
+ STAT_READ = 0,
+ STAT_WRITE = 1,
+ STAT_DISCARD = 2,
+ STAT_FLUSH = 3,
+ NR_STAT_GROUPS = 4,
+};
+
+struct sbitmap_word {
+ long unsigned int word;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long unsigned int cleared;
+ raw_spinlock_t swap_lock;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct sbitmap {
+ unsigned int depth;
+ unsigned int shift;
+ unsigned int map_nr;
+ bool round_robin;
+ struct sbitmap_word *map;
+ unsigned int *alloc_hint;
+};
+
+struct sbq_wait_state {
+ wait_queue_head_t wait;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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;
+};
+
+enum {
+ DISK_EVENT_MEDIA_CHANGE = 1,
+ DISK_EVENT_EJECT_REQUEST = 2,
+};
+
+enum {
+ DISK_EVENT_FLAG_POLL = 1,
+ DISK_EVENT_FLAG_UEVENT = 2,
+ DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE = 4,
+};
+
+typedef __u32 req_flags_t;
+
+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,
+};
+
+typedef enum rq_end_io_ret rq_end_io_fn(struct request *, blk_status_t);
+
+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 start_time_ns;
+ u64 io_start_time_ns;
+ short unsigned int stats_sectors;
+ short unsigned int nr_phys_segments;
+ short unsigned int nr_integrity_segments;
+ enum rw_hint write_hint;
+ short unsigned int ioprio;
+ enum mq_rq_state state;
+ atomic_t ref;
+ long unsigned int 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;
+};
+
+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;
+};
+
+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;
+ long unsigned int flush_pending_since;
+ struct list_head flush_queue[2];
+ long unsigned int flush_data_in_flight;
+ struct request *flush_rq;
+};
+
+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;
+};
+
+struct blk_mq_hw_ctx {
+ struct {
+ spinlock_t lock;
+ struct list_head dispatch;
+ long unsigned int state;
+ long: 64;
+ long: 64;
+ };
+ struct delayed_work run_work;
+ cpumask_var_t cpumask;
+ int next_cpu;
+ int next_cpu_batch;
+ long unsigned int 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;
+ short unsigned int type;
+ short unsigned int 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 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;
+ long: 64;
+ long: 64;
+};
+
+struct blk_mq_queue_data {
+ struct request *rq;
+ bool last;
+};
+
+struct pseudo_fs_context {
+ const struct super_operations *ops;
+ const struct xattr_handler * const *xattr;
+ const struct dentry_operations *dops;
+ long unsigned int magic;
+};
+
+struct bdev_inode {
+ struct block_device bdev;
+ struct inode vfs_inode;
+};
+
+enum {
+ ICQ_EXITED = 4,
+ ICQ_DESTROYED = 8,
+};
+
+typedef __u32 blk_mq_req_flags_t;
+
+struct elevator_type;
+
+struct elevator_queue {
+ struct elevator_type *type;
+ void *elevator_data;
+ struct kobject kobj;
+ struct mutex sysfs_lock;
+ long unsigned int flags;
+ struct hlist_head hash[64];
+};
+
+struct blk_mq_ctxs;
+
+struct blk_mq_ctx {
+ struct {
+ spinlock_t lock;
+ struct list_head rq_lists[3];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ };
+ unsigned int cpu;
+ short unsigned int index_hw[3];
+ struct blk_mq_hw_ctx *hctxs[3];
+ struct request_queue *queue;
+ struct blk_mq_ctxs *ctxs;
+ struct kobject kobj;
+ long: 64;
+};
+
+enum hctx_type {
+ HCTX_TYPE_DEFAULT = 0,
+ HCTX_TYPE_READ = 1,
+ HCTX_TYPE_POLL = 2,
+ HCTX_MAX_TYPES = 3,
+};
+
+struct blk_mq_ctxs {
+ struct kobject kobj;
+ struct blk_mq_ctx *queue_ctx;
+};
+
+typedef unsigned int blk_insert_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;
+};
+
+enum elv_merge {
+ ELEVATOR_NO_MERGE = 0,
+ ELEVATOR_FRONT_MERGE = 1,
+ ELEVATOR_BACK_MERGE = 2,
+ ELEVATOR_DISCARD_MERGE = 3,
+};
+
+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 *);
+};
+
+struct elv_fs_entry;
+
+struct blk_mq_debugfs_attr;
+
+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;
+ 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;
+};
+
+struct elv_fs_entry {
+ struct attribute attr;
+ ssize_t (*show)(struct elevator_queue *, char *);
+ ssize_t (*store)(struct elevator_queue *, const char *, size_t);
+};
+
+struct blk_mq_debugfs_attr {
+ const char *name;
+ umode_t mode;
+ int (*show)(void *, struct seq_file *);
+ ssize_t (*write)(void *, const char *, size_t, loff_t *);
+ const struct seq_operations *seq_ops;
+};
+
+typedef int (*list_cmp_func_t)(void *, const struct list_head *, const struct list_head *);
+
+enum {
+ QUEUE_FLAG_DYING = 0,
+ QUEUE_FLAG_NOMERGES = 1,
+ QUEUE_FLAG_SAME_COMP = 2,
+ QUEUE_FLAG_FAIL_IO = 3,
+ QUEUE_FLAG_NOXMERGES = 4,
+ QUEUE_FLAG_SAME_FORCE = 5,
+ QUEUE_FLAG_INIT_DONE = 6,
+ QUEUE_FLAG_STATS = 7,
+ QUEUE_FLAG_REGISTERED = 8,
+ QUEUE_FLAG_QUIESCED = 9,
+ QUEUE_FLAG_RQ_ALLOC_TIME = 10,
+ QUEUE_FLAG_HCTX_ACTIVE = 11,
+ QUEUE_FLAG_SQ_SCHED = 12,
+ QUEUE_FLAG_MAX = 13,
+};
+
+enum {
+ __RQF_STARTED = 0,
+ __RQF_FLUSH_SEQ = 1,
+ __RQF_MIXED_MERGE = 2,
+ __RQF_DONTPREP = 3,
+ __RQF_SCHED_TAGS = 4,
+ __RQF_USE_SCHED = 5,
+ __RQF_FAILED = 6,
+ __RQF_QUIET = 7,
+ __RQF_IO_STAT = 8,
+ __RQF_PM = 9,
+ __RQF_HASHED = 10,
+ __RQF_STATS = 11,
+ __RQF_SPECIAL_PAYLOAD = 12,
+ __RQF_ZONE_WRITE_PLUGGING = 13,
+ __RQF_TIMED_OUT = 14,
+ __RQF_RESV = 15,
+ __RQF_BITS = 16,
+};
+
+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 = 16,
+ BLK_MQ_F_NO_SCHED = 32,
+ BLK_MQ_F_NO_SCHED_BY_DEFAULT = 64,
+ BLK_MQ_F_ALLOC_POLICY_START_BIT = 7,
+ BLK_MQ_F_ALLOC_POLICY_BITS = 1,
+};
+
+enum {
+ BLK_MQ_S_STOPPED = 0,
+ BLK_MQ_S_TAG_ACTIVE = 1,
+ BLK_MQ_S_SCHED_RESTART = 2,
+ BLK_MQ_S_INACTIVE = 3,
+ BLK_MQ_S_MAX = 4,
+};
+
+enum blktrace_act {
+ __BLK_TA_QUEUE = 1,
+ __BLK_TA_BACKMERGE = 2,
+ __BLK_TA_FRONTMERGE = 3,
+ __BLK_TA_GETRQ = 4,
+ __BLK_TA_SLEEPRQ = 5,
+ __BLK_TA_REQUEUE = 6,
+ __BLK_TA_ISSUE = 7,
+ __BLK_TA_COMPLETE = 8,
+ __BLK_TA_PLUG = 9,
+ __BLK_TA_UNPLUG_IO = 10,
+ __BLK_TA_UNPLUG_TIMER = 11,
+ __BLK_TA_INSERT = 12,
+ __BLK_TA_SPLIT = 13,
+ __BLK_TA_BOUNCE = 14,
+ __BLK_TA_REMAP = 15,
+ __BLK_TA_ABORT = 16,
+ __BLK_TA_DRV_DATA = 17,
+ __BLK_TA_CGROUP = 256,
+};
+
+enum {
+ BLK_MQ_NO_TAG = 4294967295,
+ BLK_MQ_TAG_MIN = 1,
+ BLK_MQ_TAG_MAX = 4294967294,
+};
+
+typedef struct {
+ __u8 b[16];
+} guid_t;
+
+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;
+
+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 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 *iostat_cpu;
+ struct blkg_iostat_set iostat;
+ struct blkg_policy_data *pd[6];
+ spinlock_t async_bio_lock;
+ struct bio_list async_bios;
+ 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;
+};
+
+enum blkg_iostat_type {
+ BLKG_IOSTAT_READ = 0,
+ BLKG_IOSTAT_WRITE = 1,
+ BLKG_IOSTAT_DISCARD = 2,
+ BLKG_IOSTAT_NR = 3,
+};
+
+struct blkcg_policy_data;
+
+struct blkcg {
+ struct cgroup_subsys_state css;
+ spinlock_t lock;
+ refcount_t online_pin;
+ atomic_t congestion_count;
+ struct xarray blkg_tree;
+ struct blkcg_gq *blkg_hint;
+ struct hlist_head blkg_list;
+ struct blkcg_policy_data *cpd[6];
+ struct list_head all_blkcgs_node;
+ struct llist_head *lhead;
+ struct list_head cgwb_list;
+};
+
+struct blkg_policy_data {
+ struct blkcg_gq *blkg;
+ int plid;
+ bool online;
+};
+
+struct blkcg_policy_data {
+ struct blkcg *blkcg;
+ int plid;
+};
+
+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;
+};
+
+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 blkg_rwstat {
+ struct percpu_counter cpu_cnt[5];
+ atomic64_t aux_cnt[5];
+};
+
+struct blkg_rwstat_sample {
+ u64 cnt[5];
+};
+
+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;
+};
+
+struct pci_bus;
+
+struct hotplug_slot;
+
+struct pci_slot {
+ struct pci_bus *bus;
+ struct list_head list;
+ struct hotplug_slot *hotplug;
+ unsigned char number;
+ struct kobject kobj;
+};
+
+typedef short unsigned int 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];
+ short unsigned int 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;
+};
+
+enum {
+ PCI_STD_RESOURCES = 0,
+ PCI_STD_RESOURCE_END = 5,
+ PCI_ROM_RESOURCE = 6,
+ PCI_BRIDGE_RESOURCES = 7,
+ PCI_BRIDGE_RESOURCE_END = 10,
+ PCI_NUM_RESOURCES = 11,
+ DEVICE_COUNT_RESOURCE = 11,
+};
+
+typedef int pci_power_t;
+
+typedef unsigned int pci_channel_state_t;
+
+typedef unsigned int pcie_reset_state_t;
+
+typedef short unsigned int pci_dev_flags_t;
+
+struct pci_vpd {
+ struct mutex lock;
+ unsigned int len;
+ u8 cap;
+};
+
+struct rcec_ea;
+
+struct pci_driver;
+
+struct pcie_link_state;
+
+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;
+ short unsigned int vendor;
+ short unsigned int device;
+ short unsigned int subsystem_vendor;
+ short unsigned int subsystem_device;
+ unsigned int class;
+ u8 revision;
+ u8 hdr_type;
+ 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;
+ long unsigned int *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 pme_support: 5;
+ unsigned int pme_poll: 1;
+ unsigned int pinned: 1;
+ unsigned int config_rrs_sv: 1;
+ unsigned int imm_ready: 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;
+ u16 l1ss;
+ struct pcie_link_state *link_state;
+ 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[11];
+ 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[11];
+ struct bin_attribute *res_attr_wc[11];
+ void *msix_base;
+ raw_spinlock_t msi_lock;
+ struct pci_vpd vpd;
+ u16 acs_cap;
+ phys_addr_t rom;
+ size_t romlen;
+ const char *driver_override;
+ long unsigned int priv_flags;
+ u8 reset_methods[8];
+};
+
+struct pci_dynids {
+ spinlock_t lock;
+ struct list_head list;
+};
+
+struct pci_error_handlers;
+
+struct pci_driver {
+ 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;
+};
+
+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);
+};
+
+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 *);
+};
+
+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_rsrc_put {
+ u64 tag;
+ union {
+ void *rsrc;
+ struct file *file;
+ struct io_mapped_ubuf *buf;
+ };
+};
+
+struct io_rsrc_node {
+ 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;
+ unsigned int len;
+ unsigned int nr_bvecs;
+ unsigned int folio_shift;
+ refcount_t refs;
+ long unsigned int acct_pages;
+ struct bio_vec bvec[0];
+};
+
+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;
+ u64 work_time;
+ long unsigned int state;
+ struct completion exited;
+};
+
+struct io_rsrc_data {
+ struct io_ring_ctx *ctx;
+ u64 **tags;
+ unsigned int nr;
+ u16 rsrc_type;
+ bool quiesce;
+};
+
+struct io_wq_hash {
+ refcount_t refs;
+ long unsigned int map;
+ struct wait_queue_head wait;
+};
+
+struct io_buffer {
+ struct list_head list;
+ __u64 addr;
+ __u32 len;
+ __u16 bid;
+ __u16 bgid;
+};
+
+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;
+ __u16 flags;
+ atomic_t refs;
+};
+
+struct io_poll {
+ struct file *file;
+ struct wait_queue_head *head;
+ __poll_t events;
+ int retries;
+ struct wait_queue_entry wait;
+};
+
+struct async_poll {
+ struct io_poll poll;
+ struct io_poll *double_poll;
+};
+
+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 audit_skip: 1;
+ unsigned int ioprio: 1;
+ unsigned int iopoll: 1;
+ unsigned int iopoll_queue: 1;
+ unsigned int vectored: 1;
+ short unsigned int async_size;
+ int (*issue)(struct io_kiocb *, unsigned int);
+ int (*prep)(struct io_kiocb *, const struct io_uring_sqe *);
+};
+
+struct io_cold_def {
+ const char *name;
+ void (*cleanup)(struct io_kiocb *);
+ void (*fail)(struct io_kiocb *);
+};
+
+typedef s32 compat_ssize_t;
+
+typedef u32 compat_uint_t;
+
+struct user_msghdr {
+ void *msg_name;
+ int msg_namelen;
+ struct iovec *msg_iov;
+ __kernel_size_t msg_iovlen;
+ void *msg_control;
+ __kernel_size_t msg_controllen;
+ unsigned int msg_flags;
+};
+
+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 io_uring_recvmsg_out {
+ __u32 namelen;
+ __u32 controllen;
+ __u32 payloadlen;
+ __u32 flags;
+};
+
+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,
+ IO_URING_F_CANCEL = 2048,
+ IO_URING_F_COMPAT = 4096,
+};
+
+enum {
+ REQ_F_FIXED_FILE = 1ULL,
+ REQ_F_IO_DRAIN = 2ULL,
+ REQ_F_LINK = 4ULL,
+ REQ_F_HARDLINK = 8ULL,
+ REQ_F_FORCE_ASYNC = 16ULL,
+ REQ_F_BUFFER_SELECT = 32ULL,
+ REQ_F_CQE_SKIP = 64ULL,
+ REQ_F_FAIL = 256ULL,
+ REQ_F_INFLIGHT = 512ULL,
+ REQ_F_CUR_POS = 1024ULL,
+ REQ_F_NOWAIT = 2048ULL,
+ REQ_F_LINK_TIMEOUT = 4096ULL,
+ REQ_F_NEED_CLEANUP = 8192ULL,
+ REQ_F_POLLED = 16384ULL,
+ REQ_F_BUFFER_SELECTED = 32768ULL,
+ REQ_F_BUFFER_RING = 65536ULL,
+ REQ_F_REISSUE = 131072ULL,
+ REQ_F_SUPPORT_NOWAIT = 268435456ULL,
+ REQ_F_ISREG = 536870912ULL,
+ REQ_F_CREDS = 262144ULL,
+ REQ_F_REFCOUNT = 524288ULL,
+ REQ_F_ARM_LTIMEOUT = 1048576ULL,
+ REQ_F_ASYNC_DATA = 2097152ULL,
+ REQ_F_SKIP_LINK_CQES = 4194304ULL,
+ REQ_F_SINGLE_POLL = 8388608ULL,
+ REQ_F_DOUBLE_POLL = 16777216ULL,
+ REQ_F_APOLL_MULTISHOT = 33554432ULL,
+ REQ_F_CLEAR_POLLIN = 67108864ULL,
+ REQ_F_HASH_LOCKED = 134217728ULL,
+ REQ_F_POLL_NO_LAZY = 1073741824ULL,
+ REQ_F_CAN_POLL = 2147483648ULL,
+ REQ_F_BL_EMPTY = 4294967296ULL,
+ REQ_F_BL_NO_RECYCLE = 8589934592ULL,
+ REQ_F_BUFFERS_COMMIT = 17179869184ULL,
+};
+
+enum {
+ IOU_OK = 0,
+ IOU_ISSUE_SKIP_COMPLETE = -529,
+ IOU_REQUEUE = -3072,
+ IOU_STOP_MULTISHOT = -125,
+};
+
+enum {
+ IOBL_BUF_RING = 1,
+ IOBL_MMAP = 2,
+ IOBL_INC = 4,
+};
+
+enum {
+ KBUF_MODE_EXPAND = 1,
+ KBUF_MODE_FREE = 2,
+};
+
+struct buf_sel_arg {
+ struct iovec *iovs;
+ size_t out_len;
+ size_t max_len;
+ short unsigned int nr_iovs;
+ short unsigned int mode;
+};
+
+struct io_async_msghdr {
+ struct iovec fast_iov;
+ struct iovec *free_iov;
+ int free_iov_nr;
+ int namelen;
+ __kernel_size_t controllen;
+ __kernel_size_t payloadlen;
+ struct sockaddr *uaddr;
+ struct msghdr msg;
+ struct __kernel_sockaddr_storage addr;
+};
+
+typedef long unsigned int netmem_ref;
+
+struct skb_frag {
+ netmem_ref netmem;
+ unsigned int len;
+ unsigned int offset;
+};
+
+typedef struct skb_frag skb_frag_t;
+
+enum {
+ SKBFL_ZEROCOPY_ENABLE = 1,
+ SKBFL_SHARED_FRAG = 2,
+ SKBFL_PURE_ZEROCOPY = 4,
+ SKBFL_DONT_ORPHAN = 8,
+ SKBFL_MANAGED_FRAG_REFS = 16,
+};
+
+struct xsk_tx_metadata_compl {
+ __u64 *tx_timestamp;
+};
+
+struct skb_shared_info {
+ __u8 flags;
+ __u8 meta_len;
+ __u8 nr_frags;
+ __u8 tx_flags;
+ short unsigned int gso_size;
+ short unsigned int gso_segs;
+ struct sk_buff *frag_list;
+ union {
+ struct skb_shared_hwtstamps hwtstamps;
+ struct xsk_tx_metadata_compl xsk_meta;
+ };
+ unsigned int gso_type;
+ u32 tskey;
+ atomic_t dataref;
+ unsigned int xdp_frags_size;
+ void *destructor_arg;
+ skb_frag_t frags[17];
+};
+
+struct io_notif_data {
+ struct file *file;
+ struct ubuf_info uarg;
+ struct io_notif_data *next;
+ struct io_notif_data *head;
+ unsigned int account_pages;
+ bool zc_report;
+ bool zc_used;
+ bool zc_copied;
+};
+
+struct io_shutdown {
+ struct file *file;
+ int how;
+};
+
+struct io_accept {
+ struct file *file;
+ struct sockaddr *addr;
+ int *addr_len;
+ int flags;
+ int iou_flags;
+ u32 file_slot;
+ long unsigned int nofile;
+};
+
+struct io_socket {
+ struct file *file;
+ int domain;
+ int type;
+ int protocol;
+ int flags;
+ u32 file_slot;
+ long unsigned int nofile;
+};
+
+struct io_connect {
+ struct file *file;
+ struct sockaddr *addr;
+ int addr_len;
+ bool in_progress;
+ bool seen_econnaborted;
+};
+
+struct io_bind {
+ struct file *file;
+ int addr_len;
+};
+
+struct io_listen {
+ struct file *file;
+ int backlog;
+};
+
+struct io_sr_msg {
+ struct file *file;
+ union {
+ struct compat_msghdr *umsg_compat;
+ struct user_msghdr *umsg;
+ void *buf;
+ };
+ int len;
+ unsigned int done_io;
+ unsigned int msg_flags;
+ unsigned int nr_multishot_loops;
+ u16 flags;
+ u16 addr_len;
+ u16 buf_group;
+ void *addr;
+ void *msg_control;
+ struct io_kiocb *notif;
+};
+
+struct io_recvmsg_multishot_hdr {
+ struct io_uring_recvmsg_out msg;
+ struct __kernel_sockaddr_storage addr;
+};
+
+enum io_uring_msg_ring_flags {
+ IORING_MSG_DATA = 0,
+ IORING_MSG_SEND_FD = 1,
+};
+
+typedef void (*task_work_func_t)(struct callback_head *);
+
+enum {
+ IOU_F_TWQ_LAZY_WAKE = 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_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_uring_clock_register {
+ __u32 clockid;
+ __u32 __resv[3];
+};
+
+enum io_uring_register_restriction_op {
+ 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 io_uring_file_index_range {
+ __u32 off;
+ __u32 len;
+ __u64 resv;
+};
+
+struct io_tctx_node {
+ struct list_head ctx_node;
+ struct task_struct *task;
+ struct io_ring_ctx *ctx;
+};
+
+enum {
+ IORING_RSRC_FILE = 0,
+ IORING_RSRC_BUFFER = 1,
+};
+
+struct genradix_node {
+ union {
+ struct genradix_node *children[64];
+ u8 data[512];
+ };
+};
+
+struct genradix_iter {
+ size_t offset;
+ size_t pos;
+};
+
+typedef long unsigned int mpi_limb_t;
+
+typedef mpi_limb_t *mpi_ptr_t;
+
+typedef int mpi_size_t;
+
+typedef mpi_limb_t UWtype;
+
+typedef unsigned int UHWtype;
+
+struct gcry_mpi {
+ int alloced;
+ int nlimbs;
+ int nbits;
+ int sign;
+ unsigned int flags;
+ mpi_limb_t *d;
+};
+
+typedef struct gcry_mpi *MPI;
+
+typedef long int mpi_limb_signed_t;
+
+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 __kernel_long_t __kernel_ptrdiff_t;
+
+typedef __kernel_ptrdiff_t ptrdiff_t;
+
+typedef u16 uint16_t;
+
+typedef uint8_t BYTE;
+
+typedef uint16_t U16;
+
+typedef uint32_t U32;
+
+typedef uint64_t U64;
+
+typedef struct {
+ size_t bitContainer;
+ unsigned int bitPos;
+ char *startPtr;
+ char *ptr;
+ char *endPtr;
+} BIT_CStream_t;
+
+typedef unsigned int FSE_CTable;
+
+typedef struct {
+ ptrdiff_t value;
+ const void *stateTable;
+ const void *symbolTT;
+ unsigned int stateLog;
+} FSE_CState_t;
+
+typedef struct {
+ int deltaFindState;
+ U32 deltaNbBits;
+} FSE_symbolCompressionTransform;
+
+typedef s16 int16_t;
+
+typedef uint8_t U8;
+
+typedef int16_t S16;
+
+typedef enum {
+ FSE_repeat_none = 0,
+ FSE_repeat_check = 1,
+ FSE_repeat_valid = 2,
+} FSE_repeat;
+
+typedef size_t HUF_CElt;
+
+typedef enum {
+ HUF_repeat_none = 0,
+ HUF_repeat_check = 1,
+ HUF_repeat_valid = 2,
+} HUF_repeat;
+
+typedef struct {
+ U32 f1c;
+ U32 f1d;
+ U32 f7b;
+ U32 f7c;
+} ZSTD_cpuid_t;
+
+typedef enum {
+ ZSTDcs_created = 0,
+ ZSTDcs_init = 1,
+ ZSTDcs_ongoing = 2,
+ ZSTDcs_ending = 3,
+} ZSTD_compressionStage_e;
+
+typedef enum {
+ ZSTD_f_zstd1 = 0,
+ ZSTD_f_zstd1_magicless = 1,
+} ZSTD_format_e;
+
+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 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_bm_buffered = 0,
+ ZSTD_bm_stable = 1,
+} ZSTD_bufferMode_e;
+
+typedef enum {
+ ZSTD_sf_noBlockDelimiters = 0,
+ ZSTD_sf_explicitBlockDelimiters = 1,
+} ZSTD_sequenceFormat_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;
+
+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 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;
+};
+
+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 struct {
+ HUF_CElt CTable[257];
+ HUF_repeat repeatMode;
+} ZSTD_hufCTables_t;
+
+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;
+
+struct ZSTD_inBuffer_s {
+ const void *src;
+ size_t size;
+ size_t pos;
+};
+
+typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
+
+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;
+ long long unsigned int pledgedSrcSizePlusOne;
+ long long unsigned int consumedSrcSize;
+ long long unsigned int 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 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 {
+ size_t error;
+ int lowerBound;
+ int upperBound;
+} ZSTD_bounds;
+
+typedef enum {
+ ZSTD_reset_session_only = 1,
+ ZSTD_reset_parameters = 2,
+ ZSTD_reset_session_and_parameters = 3,
+} ZSTD_ResetDirective;
+
+struct ZSTD_outBuffer_s {
+ void *dst;
+ size_t size;
+ size_t pos;
+};
+
+typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
+
+typedef ZSTD_CCtx ZSTD_CStream;
+
+typedef enum {
+ ZSTD_e_continue = 0,
+ ZSTD_e_flush = 1,
+ ZSTD_e_end = 2,
+} ZSTD_EndDirective;
+
+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 {
+ ZSTD_compressionParameters cParams;
+ ZSTD_frameParameters fParams;
+} ZSTD_parameters;
+
+typedef enum {
+ ZSTD_dlm_byCopy = 0,
+ ZSTD_dlm_byRef = 1,
+} ZSTD_dictLoadMethod_e;
+
+typedef struct {
+ long long unsigned int ingested;
+ long long unsigned int consumed;
+ long long unsigned int produced;
+ long long unsigned int flushed;
+ unsigned int currentJobID;
+ unsigned int nbActiveWorkers;
+} ZSTD_frameProgression;
+
+typedef enum {
+ ZSTD_no_overlap = 0,
+ ZSTD_overlap_src_before_dst = 1,
+} ZSTD_overlap_e;
+
+struct seqDef_s {
+ U32 offBase;
+ U16 litLength;
+ U16 mlBase;
+};
+
+typedef enum {
+ ZSTD_dtlm_fast = 0,
+ ZSTD_dtlm_full = 1,
+} ZSTD_dictTableLoadMethod_e;
+
+typedef enum {
+ ZSTD_noDict = 0,
+ ZSTD_extDict = 1,
+ ZSTD_dictMatchState = 2,
+ ZSTD_dedicatedDictSearch = 3,
+} ZSTD_dictMode_e;
+
+typedef enum {
+ ZSTD_cpm_noAttachDict = 0,
+ ZSTD_cpm_attachDict = 1,
+ ZSTD_cpm_createCDict = 2,
+ ZSTD_cpm_unknown = 3,
+} ZSTD_cParamMode_e;
+
+typedef size_t (*ZSTD_blockCompressor)(ZSTD_matchState_t *, seqStore_t *, U32 *, const void *, size_t);
+
+struct repcodes_s {
+ U32 rep[3];
+};
+
+typedef struct repcodes_s repcodes_t;
+
+typedef enum {
+ ZSTD_defaultDisallowed = 0,
+ ZSTD_defaultAllowed = 1,
+} ZSTD_defaultPolicy_e;
+
+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 {
+ U32 LLtype;
+ U32 Offtype;
+ U32 MLtype;
+ size_t size;
+ size_t lastCountSize;
+} ZSTD_symbolEncodingTypeStats_t;
+
+enum {
+ ZSTDbss_compress = 0,
+ ZSTDbss_noCompress = 1,
+};
+
+typedef struct {
+ U32 *splitLocations;
+ size_t idx;
+} seqStoreSplits;
+
+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_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;
+
+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 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 word_at_a_time {
+ const long unsigned int one_bits;
+ const long unsigned int high_bits;
+};
+
+typedef u32 depot_stack_handle_t;
+
+union handle_parts {
+ depot_stack_handle_t handle;
+ struct {
+ u32 pool_index_plus_1: 17;
+ u32 offset: 10;
+ u32 extra: 5;
+ };
+};
+
+struct stack_record {
+ struct list_head hash_list;
+ u32 hash;
+ u32 size;
+ union handle_parts handle;
+ refcount_t count;
+ union {
+ long unsigned int entries[64];
+ struct {
+ struct list_head free_list;
+ long unsigned int rcu_state;
+ };
+ };
+};
+
+typedef u32 depot_flags_t;
+
+enum depot_counter_id {
+ DEPOT_COUNTER_REFD_ALLOCS = 0,
+ DEPOT_COUNTER_REFD_FREES = 1,
+ DEPOT_COUNTER_REFD_INUSE = 2,
+ DEPOT_COUNTER_FREELIST_SIZE = 3,
+ DEPOT_COUNTER_PERSIST_COUNT = 4,
+ DEPOT_COUNTER_PERSIST_BYTES = 5,
+ DEPOT_COUNTER_COUNT = 6,
+};
+
+struct sbq_wait {
+ struct sbitmap_queue *sbq;
+ struct wait_queue_entry wait;
+};
+
+struct mmiowb_state {
+ u16 nesting_count;
+ u16 mmiowb_pending;
+};
+
+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 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 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 msi_desc {
+ unsigned int irq;
+ unsigned int nvec_used;
+ struct device *dev;
+ struct msi_msg msg;
+ struct irq_affinity_desc *affinity;
+ 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;
+ };
+};
+
+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 imsic_local_config {
+ phys_addr_t msi_pa;
+ void *msi_va;
+};
+
+struct imsic_global_config {
+ u32 guest_index_bits;
+ u32 hart_index_bits;
+ u32 group_index_bits;
+ u32 group_index_shift;
+ phys_addr_t base_addr;
+ u32 nr_ids;
+ u32 nr_guest_ids;
+ struct imsic_local_config *local;
+};
+
+enum msi_domain_ids {
+ MSI_DEFAULT_DOMAIN = 0,
+ MSI_MAX_DEVICE_IRQDOMAINS = 1,
+};
+
+struct msi_alloc_info {
+ struct msi_desc *desc;
+ irq_hw_number_t hwirq;
+ long unsigned int flags;
+ union {
+ long unsigned int ul;
+ void *ptr;
+ } scratchpad[2];
+};
+
+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 *);
+ int (*msi_translate)(struct irq_domain *, struct irq_fwspec *, irq_hw_number_t *, unsigned int *);
+};
+
+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_domain_template {
+ char name[48];
+ struct irq_chip chip;
+ struct msi_domain_ops ops;
+ struct msi_domain_info info;
+};
+
+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_FLAG_USE_DEV_FWNODE = 128,
+ MSI_FLAG_PARENT_PM_DEV = 256,
+ MSI_FLAG_PCI_MSI_MASK_PARENT = 512,
+ 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_NO_AFFINITY = 2097152,
+};
+
+struct aplic_msicfg {
+ phys_addr_t base_ppn;
+ u32 hhxs;
+ u32 hhxw;
+ u32 lhxs;
+ u32 lhxw;
+};
+
+struct aplic_priv {
+ struct device *dev;
+ u32 gsi_base;
+ u32 nr_irqs;
+ u32 nr_idcs;
+ u32 acpi_aplic_id;
+ void *regs;
+ struct aplic_msicfg msicfg;
+};
+
+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;
+ long unsigned int hs_clk_rate;
+ long unsigned int lp_clk_rate;
+ unsigned char lanes;
+};
+
+struct of_phandle_args {
+ struct device_node *np;
+ int args_count;
+ uint32_t args[16];
+};
+
+struct pinctrl_pin_desc {
+ unsigned int number;
+ const char *name;
+ void *drv_data;
+};
+
+struct pinctrl_dev;
+
+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 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;
+};
+
+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,
+};
+
+struct pinctrl_map_mux {
+ const char *group;
+ const char *function;
+};
+
+struct pinctrl_map_configs {
+ const char *group_or_pin;
+ long unsigned int *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 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_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, long unsigned int *);
+ int (*pin_config_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);
+ int (*pin_config_group_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);
+ int (*pin_config_group_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, 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 *, long unsigned int);
+};
+
+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_INPUT_SCHMITT_UV = 15,
+ PIN_CONFIG_MODE_LOW_POWER = 16,
+ PIN_CONFIG_MODE_PWM = 17,
+ PIN_CONFIG_OUTPUT = 18,
+ PIN_CONFIG_OUTPUT_ENABLE = 19,
+ PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS = 20,
+ PIN_CONFIG_PERSIST_STATE = 21,
+ PIN_CONFIG_POWER_SOURCE = 22,
+ PIN_CONFIG_SKEW_DELAY = 23,
+ PIN_CONFIG_SLEEP_HARDWARE_STATE = 24,
+ PIN_CONFIG_SLEW_RATE = 25,
+ PIN_CONFIG_END = 127,
+ PIN_CONFIG_MAX = 255,
+};
+
+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 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_dt_map {
+ struct list_head node;
+ struct pinctrl_dev *pctldev;
+ struct pinctrl_map *map;
+ unsigned int num_maps;
+};
+
+struct platform_device_id {
+ char name[20];
+ kernel_ulong_t driver_data;
+};
+
+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 *, long unsigned int *, unsigned int);
+ long unsigned int *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 *);
+};
+
+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 *, long unsigned int *, long unsigned int *);
+ void (*set)(struct gpio_chip *, unsigned int, int);
+ void (*set_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
+ int (*set_config)(struct gpio_chip *, unsigned int, long unsigned int);
+ int (*to_irq)(struct gpio_chip *, unsigned int);
+ void (*dbg_show)(struct seq_file *, struct gpio_chip *);
+ int (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
+ int (*add_pin_ranges)(struct gpio_chip *);
+ int (*en_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
+ int (*dis_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
+ int base;
+ u16 ngpio;
+ u16 offset;
+ const char * const *names;
+ bool can_sleep;
+ long unsigned int (*read_reg)(void *);
+ void (*write_reg)(void *, long unsigned int);
+ 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;
+ long unsigned int bgpio_data;
+ long unsigned int bgpio_dir;
+ struct gpio_irq_chip irq;
+ long unsigned int *valid_mask;
+ unsigned int of_gpio_n_cells;
+ int (*of_xlate)(struct gpio_chip *, const struct of_phandle_args *, u32 *);
+};
+
+union gpio_irq_fwspec {
+ struct irq_fwspec fwspec;
+ msi_alloc_info_t msiinfo;
+};
+
+struct pdev_archdata {};
+
+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;
+};
+
+struct platform_driver {
+ int (*probe)(struct platform_device *);
+ union {
+ void (*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;
+};
+
+struct jh7110_pinctrl_soc_info;
+
+struct jh7110_pinctrl {
+ struct device *dev;
+ struct gpio_chip gc;
+ struct pinctrl_gpio_range gpios;
+ raw_spinlock_t lock;
+ void *base;
+ struct pinctrl_dev *pctl;
+ struct mutex mutex;
+ const struct jh7110_pinctrl_soc_info *info;
+ u32 *saved_regs;
+};
+
+struct jh7110_gpio_irq_reg;
+
+struct jh7110_pinctrl_soc_info {
+ const struct pinctrl_pin_desc *pins;
+ unsigned int npins;
+ unsigned int ngpios;
+ unsigned int gc_base;
+ unsigned int dout_reg_base;
+ unsigned int dout_mask;
+ unsigned int doen_reg_base;
+ unsigned int doen_mask;
+ unsigned int gpi_reg_base;
+ unsigned int gpi_mask;
+ unsigned int gpioin_reg_base;
+ const struct jh7110_gpio_irq_reg *irq_reg;
+ unsigned int nsaved_regs;
+ int (*jh7110_set_one_pin_mux)(struct jh7110_pinctrl *, unsigned int, unsigned int, u32, u32, u32);
+ int (*jh7110_get_padcfg_base)(struct jh7110_pinctrl *, unsigned int);
+ void (*jh7110_gpio_irq_handler)(struct irq_desc *);
+ int (*jh7110_gpio_init_hw)(struct gpio_chip *);
+};
+
+struct jh7110_gpio_irq_reg {
+ unsigned int is_reg_base;
+ unsigned int ic_reg_base;
+ unsigned int ibe_reg_base;
+ unsigned int iev_reg_base;
+ unsigned int ie_reg_base;
+ unsigned int ris_reg_base;
+ unsigned int mis_reg_base;
+};
+
+struct jh7110_func_sel {
+ u16 offset;
+ u8 shift;
+ u8 max;
+};
+
+struct jh7110_vin_group_sel {
+ u16 offset;
+ u8 shift;
+ u8 group;
+};
+
+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 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;
+};
+
+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 software_node;
+
+struct software_node_ref_args {
+ const struct software_node *node;
+ unsigned int nargs;
+ u64 args[8];
+};
+
+struct property_entry;
+
+struct software_node {
+ const char *name;
+ const struct software_node *parent;
+ const struct property_entry *properties;
+};
+
+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;
+ };
+};
+
+typedef u64 acpi_size;
+
+typedef u64 acpi_io_address;
+
+typedef u64 acpi_physical_address;
+
+typedef void *acpi_handle;
+
+typedef u32 acpi_object_type;
+
+typedef u8 acpi_adr_space_type;
+
+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;
+};
+
+struct acpi_object_list {
+ u32 count;
+ union acpi_object *pointer;
+};
+
+struct acpi_buffer {
+ acpi_size length;
+ void *pointer;
+};
+
+typedef void (*acpi_object_handler)(acpi_handle, void *);
+
+typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);
+
+struct acpi_connection_info {
+ u8 *connection;
+ u16 length;
+ u8 access_length;
+};
+
+typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);
+
+struct acpi_generic_address {
+ u8 space_id;
+ u8 bit_width;
+ u8 bit_offset;
+ u8 access_width;
+ u64 address;
+} __attribute__((packed));
+
+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_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_resource_label {
+ u16 string_length;
+ char *string_ptr;
+} __attribute__((packed));
+
+struct acpi_resource_source {
+ u8 index;
+ u16 string_length;
+ char *string_ptr;
+} __attribute__((packed));
+
+struct acpi_address16_attribute {
+ u16 granularity;
+ u16 minimum;
+ u16 maximum;
+ u16 translation_offset;
+ u16 address_length;
+};
+
+struct acpi_address32_attribute {
+ u32 granularity;
+ u32 minimum;
+ u32 maximum;
+ u32 translation_offset;
+ u32 address_length;
+};
+
+struct acpi_address64_attribute {
+ u64 granularity;
+ u64 minimum;
+ u64 maximum;
+ u64 translation_offset;
+ u64 address_length;
+};
+
+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;
+};
+
+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_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_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_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_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_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_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_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));
+
+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;
+};
+
+typedef acpi_status (*acpi_walk_resource_callback)(struct acpi_resource *, void *);
+
+struct acpi_device;
+
+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_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;
+};
+
+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 list_head resources;
+ struct {
+ u8 valid: 1;
+ u8 explicit_set: 1;
+ u8 reserved: 6;
+ } flags;
+ int power;
+ int latency;
+};
+
+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_device_software_nodes;
+
+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;
+ struct acpi_device_software_nodes *swnodes;
+ 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_scan_handler {
+ struct list_head list_node;
+ const struct acpi_device_id *ids;
+ 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 (*post_eject)(struct acpi_device *);
+ void (*bind)(struct device *);
+ void (*unbind)(struct device *);
+ struct acpi_hotplug_profile hotplug;
+};
+
+typedef int (*acpi_hp_notify)(struct acpi_device *, u32);
+
+typedef void (*acpi_hp_uevent)(struct acpi_device *, u32);
+
+typedef void (*acpi_hp_fixup)(struct acpi_device *);
+
+struct acpi_hotplug_context {
+ struct acpi_device *self;
+ acpi_hp_notify notify;
+ acpi_hp_uevent uevent;
+ acpi_hp_fixup fixup;
+};
+
+struct acpi_device_perf_state {
+ struct {
+ u8 valid: 1;
+ u8 reserved: 7;
+ } flags;
+ u8 power;
+ u8 performance;
+ int latency;
+};
+
+struct acpi_device_software_node_port {
+ char port_name[9];
+ u32 data_lanes[8];
+ u32 lane_polarities[9];
+ u64 link_frequencies[8];
+ unsigned int port_nr;
+ bool crs_csi2_local;
+ struct property_entry port_props[2];
+ struct property_entry ep_props[8];
+ struct software_node_ref_args remote_ep[1];
+};
+
+struct acpi_device_software_nodes {
+ struct property_entry dev_props[6];
+ struct software_node *nodes;
+ const struct software_node **nodeptrs;
+ struct acpi_device_software_node_port *ports;
+ unsigned int num_ports;
+};
+
+struct acpi_gpio_params;
+
+struct acpi_gpio_mapping {
+ const char *name;
+ const struct acpi_gpio_params *data;
+ unsigned int size;
+ unsigned int quirks;
+};
+
+struct gpio_desc_label;
+
+struct gpio_desc {
+ struct gpio_device *gdev;
+ long unsigned int flags;
+ struct gpio_desc_label *label;
+ const char *name;
+};
+
+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,
+};
+
+struct acpi_gpio_params {
+ unsigned int crs_entry_index;
+ unsigned int line_index;
+ bool active_low;
+};
+
+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;
+ struct srcu_struct desc_srcu;
+ unsigned int base;
+ u16 ngpio;
+ bool can_sleep;
+ const char *label;
+ void *data;
+ struct list_head list;
+ struct blocking_notifier_head line_state_notifier;
+ struct blocking_notifier_head device_notifier;
+ struct srcu_struct srcu;
+ struct list_head pin_ranges;
+};
+
+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,
+};
+
+struct gpio_desc_label {
+ struct callback_head rh;
+ char str[0];
+};
+
+struct acpi_gpiolib_dmi_quirk {
+ bool no_edge_events_on_boot;
+ char *ignore_wake;
+ char *ignore_interrupt;
+};
+
+struct acpi_gpio_event {
+ struct list_head node;
+ acpi_handle handle;
+ irq_handler_t handler;
+ unsigned int pin;
+ unsigned int irq;
+ long unsigned int irqflags;
+ bool irq_is_wake;
+ bool irq_requested;
+ struct gpio_desc *desc;
+};
+
+struct acpi_gpio_connection {
+ struct list_head node;
+ unsigned int pin;
+ struct gpio_desc *desc;
+};
+
+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;
+};
+
+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 int (*device_match_t)(struct device *, const void *);
+
+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 rcec_ea {
+ u8 nextbusn;
+ u8 lastbusn;
+ u32 bitmap;
+};
+
+typedef resource_size_t (*resource_alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
+
+struct resource_constraint {
+ resource_size_t min;
+ resource_size_t max;
+ resource_size_t align;
+ resource_alignf alignf;
+ void *alignf_data;
+};
+
+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);
+ long unsigned int private[0];
+};
+
+typedef u64 pci_bus_addr_t;
+
+struct pci_bus_region {
+ pci_bus_addr_t start;
+ pci_bus_addr_t end;
+};
+
+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;
+ long unsigned int flags;
+};
+
+enum release_type {
+ leaf_only = 0,
+ whole_subtree = 1,
+};
+
+enum enable_type {
+ undefined = -1,
+ user_disabled = 0,
+ auto_disabled = 1,
+ user_enabled = 2,
+ auto_enabled = 3,
+};
+
+enum {
+ pci_channel_io_normal = 1,
+ pci_channel_io_frozen = 2,
+ pci_channel_io_perm_failure = 3,
+};
+
+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 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 portdrv_service_data {
+ struct pcie_port_service_driver *drv;
+ struct device *dev;
+ u32 service;
+};
+
+typedef int (*pcie_callback_t)(struct pcie_device *);
+
+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 resource_entry {
+ struct list_head node;
+ struct resource *res;
+ resource_size_t offset;
+ struct resource __res;
+};
+
+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 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 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 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 pm_qos_flags_status {
+ PM_QOS_FLAGS_UNDEFINED = -1,
+ PM_QOS_FLAGS_NONE = 0,
+ PM_QOS_FLAGS_SOME = 1,
+ PM_QOS_FLAGS_ALL = 2,
+};
+
+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;
+};
+
+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;
+};
+
+struct hpx_type0 {
+ u32 revision;
+ u8 cache_line_size;
+ u8 latency_timer;
+ u8 enable_serr;
+ u8 enable_perr;
+};
+
+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;
+};
+
+enum hpx_type3_dev_type {
+ HPX_TYPE_ENDPOINT = 1,
+ HPX_TYPE_LEG_END = 2,
+ HPX_TYPE_RC_END = 4,
+ HPX_TYPE_RC_EC = 8,
+ HPX_TYPE_ROOT_PORT = 16,
+ HPX_TYPE_UPSTREAM = 32,
+ HPX_TYPE_DOWNSTREAM = 64,
+ HPX_TYPE_PCI_BRIDGE = 128,
+ HPX_TYPE_PCIE_BRIDGE = 256,
+};
+
+enum hpx_type3_fn_type {
+ HPX_FN_NORMAL = 1,
+ HPX_FN_SRIOV_PHYS = 2,
+ HPX_FN_SRIOV_VIRT = 4,
+};
+
+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,
+};
+
+struct acpi_pci_generic_root_info {
+ struct acpi_pci_root_info common;
+ struct pci_config_window *cfg;
+};
+
+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 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;
+};
+
+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 vesa_blank_mode {
+ VESA_NO_BLANKING = 0,
+ VESA_VSYNC_SUSPEND = 1,
+ VESA_HSYNC_SUSPEND = 2,
+ VESA_POWERDOWN = 3,
+ VESA_BLANK_MAX = 3,
+};
+
+struct fb_fix_screeninfo {
+ char id[16];
+ long unsigned int smem_start;
+ __u32 smem_len;
+ __u32 type;
+ __u32 type_aux;
+ __u32 visual;
+ __u16 xpanstep;
+ __u16 ypanstep;
+ __u16 ywrapstep;
+ __u32 line_length;
+ long unsigned int mmio_start;
+ __u32 mmio_len;
+ __u32 accel;
+ __u16 capabilities;
+ __u16 reserved[2];
+};
+
+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_cmap {
+ __u32 start;
+ __u32 len;
+ __u16 *red;
+ __u16 *green;
+ __u16 *blue;
+ __u16 *transp;
+};
+
+struct fb_copyarea {
+ __u32 dx;
+ __u32 dy;
+ __u32 width;
+ __u32 height;
+ __u32 sx;
+ __u32 sy;
+};
+
+struct fb_fillrect {
+ __u32 dx;
+ __u32 dy;
+ __u32 width;
+ __u32 height;
+ __u32 color;
+ __u32 rop;
+};
+
+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_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_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_info;
+
+struct fb_pixmap {
+ u8 *addr;
+ u32 size;
+ u32 offset;
+ u32 buf_align;
+ u32 scan_align;
+ u32 access_align;
+ u32 flags;
+ long unsigned int blit_x[1];
+ long unsigned int blit_y[2];
+ void (*writeio)(struct fb_info *, void *, void *, unsigned int);
+ void (*readio)(struct fb_info *, void *, void *, unsigned int);
+};
+
+struct fb_deferred_io_pageref;
+
+struct fb_deferred_io;
+
+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;
+ struct delayed_work deferred_work;
+ long unsigned int npagerefs;
+ struct fb_deferred_io_pageref *pagerefs;
+ struct fb_deferred_io *fbdefio;
+ const struct fb_ops *fbops;
+ struct device *device;
+ struct device *dev;
+ int class_flag;
+ union {
+ char *screen_base;
+ char *screen_buffer;
+ };
+ long unsigned int screen_size;
+ void *pseudo_palette;
+ u32 state;
+ void *fbcon_par;
+ void *par;
+ bool skip_vt_switch;
+ bool skip_panic;
+};
+
+struct fb_blit_caps {
+ long unsigned int x[1];
+ long unsigned int y[2];
+ u32 len;
+ u32 flags;
+};
+
+struct fb_deferred_io_pageref {
+ struct page *page;
+ long unsigned int offset;
+ struct list_head list;
+};
+
+struct fb_deferred_io {
+ long unsigned int delay;
+ bool sort_pagereflist;
+ int open_count;
+ struct mutex lock;
+ struct list_head pagereflist;
+ struct page * (*get_page)(struct fb_info *, long unsigned int);
+ void (*deferred_io)(struct fb_info *, struct list_head *);
+};
+
+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 *, size_t, loff_t *);
+ ssize_t (*fb_write)(struct fb_info *, const char *, 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, long unsigned int);
+ int (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);
+ 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 *);
+};
+
+typedef unsigned char u_char;
+
+typedef short unsigned int u_short;
+
+typedef unsigned int u_int;
+
+enum {
+ KERNEL_PARAM_FL_UNSAFE = 1,
+ KERNEL_PARAM_FL_HWPARAM = 2,
+};
+
+enum con_scroll {
+ SM_UP = 0,
+ SM_DOWN = 1,
+};
+
+enum vc_intensity {
+ VCI_HALF_BRIGHT = 0,
+ VCI_NORMAL = 1,
+ VCI_BOLD = 2,
+ VCI_MASK = 3,
+};
+
+struct vc_data;
+
+struct console_font;
+
+struct consw {
+ struct module *owner;
+ const char * (*con_startup)();
+ void (*con_init)(struct vc_data *, bool);
+ void (*con_deinit)(struct vc_data *);
+ void (*con_clear)(struct vc_data *, unsigned int, unsigned int, unsigned int);
+ void (*con_putc)(struct vc_data *, u16, unsigned int, unsigned int);
+ void (*con_putcs)(struct vc_data *, const u16 *, unsigned int, unsigned int, unsigned int);
+ void (*con_cursor)(struct vc_data *, bool);
+ bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
+ bool (*con_switch)(struct vc_data *);
+ bool (*con_blank)(struct vc_data *, enum vesa_blank_mode, bool);
+ int (*con_font_set)(struct vc_data *, const struct console_font *, unsigned int, unsigned int);
+ int (*con_font_get)(struct vc_data *, struct console_font *, unsigned int);
+ int (*con_font_default)(struct vc_data *, struct console_font *, const char *);
+ int (*con_resize)(struct vc_data *, unsigned int, unsigned int, bool);
+ void (*con_set_palette)(struct vc_data *, const unsigned char *);
+ void (*con_scrolldelta)(struct vc_data *, int);
+ bool (*con_set_origin)(struct vc_data *);
+ void (*con_save_screen)(struct vc_data *);
+ u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
+ void (*con_invert_region)(struct vc_data *, u16 *, int);
+ void (*con_debug_enter)(struct vc_data *);
+ void (*con_debug_leave)(struct vc_data *);
+};
+
+struct vc_state {
+ unsigned int x;
+ unsigned int y;
+ unsigned char color;
+ unsigned char Gx_charset[2];
+ unsigned int charset: 1;
+ enum vc_intensity intensity;
+ bool italic;
+ bool underline;
+ bool blink;
+ bool reverse;
+};
+
+struct console_font {
+ unsigned int width;
+ unsigned int height;
+ unsigned int charcount;
+ unsigned char *data;
+};
+
+struct vt_mode {
+ char mode;
+ char waitv;
+ short int relsig;
+ short int acqsig;
+ short int frsig;
+};
+
+struct uni_pagedict;
+
+struct vc_data {
+ struct tty_port port;
+ struct vc_state state;
+ struct vc_state saved_state;
+ short unsigned int vc_num;
+ unsigned int vc_cols;
+ unsigned int vc_rows;
+ unsigned int vc_size_row;
+ unsigned int vc_scan_lines;
+ unsigned int vc_cell_height;
+ long unsigned int vc_origin;
+ long unsigned int vc_scr_end;
+ long unsigned int vc_visible_origin;
+ unsigned int vc_top;
+ unsigned int vc_bottom;
+ const struct consw *vc_sw;
+ short unsigned int *vc_screenbuf;
+ unsigned int vc_screenbuf_size;
+ unsigned char vc_mode;
+ unsigned char vc_attr;
+ unsigned char vc_def_color;
+ unsigned char vc_ulcolor;
+ unsigned char vc_itcolor;
+ unsigned char vc_halfcolor;
+ unsigned int vc_cursor_type;
+ short unsigned int vc_complement_mask;
+ short unsigned int vc_s_complement_mask;
+ long unsigned int vc_pos;
+ short unsigned int vc_hi_font_mask;
+ struct console_font vc_font;
+ short unsigned int vc_video_erase_char;
+ unsigned int vc_state;
+ unsigned int vc_npar;
+ unsigned int vc_par[16];
+ struct vt_mode vt_mode;
+ struct pid *vt_pid;
+ int vt_newvt;
+ wait_queue_head_t paste_wait;
+ unsigned int vc_disp_ctrl: 1;
+ unsigned int vc_toggle_meta: 1;
+ unsigned int vc_decscnm: 1;
+ unsigned int vc_decom: 1;
+ unsigned int vc_decawm: 1;
+ unsigned int vc_deccm: 1;
+ unsigned int vc_decim: 1;
+ unsigned int vc_priv: 3;
+ unsigned int vc_need_wrap: 1;
+ unsigned int vc_can_do_color: 1;
+ unsigned int vc_report_mouse: 2;
+ unsigned char vc_utf: 1;
+ unsigned char vc_utf_count;
+ int vc_utf_char;
+ long unsigned int vc_tab_stop[4];
+ unsigned char vc_palette[48];
+ short unsigned int *vc_translate;
+ unsigned int vc_bell_pitch;
+ unsigned int vc_bell_duration;
+ short unsigned int vc_cur_blink_ms;
+ struct vc_data **vc_display_fg;
+ struct uni_pagedict *uni_pagedict;
+ struct uni_pagedict **uni_pagedict_loc;
+ u32 **vc_uni_lines;
+};
+
+struct fb_con2fbmap {
+ __u32 console;
+ __u32 framebuffer;
+};
+
+enum {
+ FB_BLANK_UNBLANK = 0,
+ FB_BLANK_NORMAL = 1,
+ FB_BLANK_VSYNC_SUSPEND = 2,
+ FB_BLANK_HSYNC_SUSPEND = 3,
+ FB_BLANK_POWERDOWN = 4,
+};
+
+struct vc {
+ struct vc_data *d;
+ struct work_struct SAK_work;
+};
+
+struct font_desc {
+ int idx;
+ const char *name;
+ unsigned int width;
+ unsigned int height;
+ unsigned int charcount;
+ const void *data;
+ int pref;
+};
+
+struct fbcon_display {
+ const u_char *fontdata;
+ int userfont;
+ u_short inverse;
+ short int yscroll;
+ int vrows;
+ int cursor_shape;
+ int con_rotate;
+ u32 xres_virtual;
+ u32 yres_virtual;
+ u32 height;
+ u32 width;
+ u32 bits_per_pixel;
+ u32 grayscale;
+ u32 nonstd;
+ u32 accel_flags;
+ u32 rotate;
+ struct fb_bitfield red;
+ struct fb_bitfield green;
+ struct fb_bitfield blue;
+ struct fb_bitfield transp;
+ const struct fb_videomode *mode;
+};
+
+struct fbcon_ops {
+ void (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);
+ void (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);
+ void (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);
+ void (*clear_margins)(struct vc_data *, struct fb_info *, int, int);
+ void (*cursor)(struct vc_data *, struct fb_info *, bool, int, int);
+ int (*update_start)(struct fb_info *);
+ int (*rotate_font)(struct fb_info *, struct vc_data *);
+ struct fb_var_screeninfo var;
+ struct delayed_work cursor_work;
+ struct fb_cursor cursor_state;
+ struct fbcon_display *p;
+ struct fb_info *info;
+ int currcon;
+ int cur_blink_jiffies;
+ int cursor_flash;
+ int cursor_reset;
+ int blank_state;
+ int graphics;
+ int save_graphics;
+ bool initialized;
+ int rotate;
+ int cur_rotate;
+ char *cursor_data;
+ u8 *fontbuffer;
+ u8 *fontdata;
+ u8 *cursor_src;
+ u32 cursor_size;
+ u32 fd_size;
+};
+
+enum {
+ FBCON_LOGO_CANSHOW = -1,
+ FBCON_LOGO_DRAW = -2,
+ FBCON_LOGO_DONTSHOW = -3,
+};
+
+typedef u16 acpi_owner_id;
+
+union acpi_name_union {
+ u32 integer;
+ char ascii[4];
+};
+
+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;
+};
+
+struct acpi_subtable_header {
+ u8 type;
+ u8 length;
+};
+
+struct acpi_table_cdat {
+ u32 length;
+ u8 revision;
+ u8 checksum;
+ u8 reserved[6];
+ u32 sequence;
+};
+
+struct acpi_cdat_header {
+ u8 type;
+ u8 reserved;
+ u16 length;
+};
+
+struct acpi_cedt_header {
+ u8 type;
+ u8 reserved;
+ u16 length;
+};
+
+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,
+};
+
+struct acpi_hmat_structure {
+ u16 type;
+ u16 reserved;
+ u32 length;
+};
+
+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,
+};
+
+struct acpi_madt_local_apic {
+ struct acpi_subtable_header header;
+ u8 processor_id;
+ u8 id;
+ u32 lapic_flags;
+};
+
+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_local_apic_nmi {
+ struct acpi_subtable_header header;
+ u8 processor_id;
+ u16 inti_flags;
+ u8 lint;
+} __attribute__((packed));
+
+struct acpi_madt_local_apic_override {
+ struct acpi_subtable_header header;
+ u16 reserved;
+ u64 address;
+} __attribute__((packed));
+
+struct acpi_madt_io_sapic {
+ struct acpi_subtable_header header;
+ u8 id;
+ u8 reserved;
+ u32 global_irq_base;
+ u64 address;
+};
+
+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_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_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_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_multiproc_wakeup {
+ struct acpi_subtable_header header;
+ u16 version;
+ u32 reserved;
+ u64 mailbox_address;
+ u64 reset_vector;
+};
+
+enum acpi_madt_multiproc_wakeup_version {
+ ACPI_MADT_MP_WAKEUP_VERSION_NONE = 0,
+ ACPI_MADT_MP_WAKEUP_VERSION_V1 = 1,
+ ACPI_MADT_MP_WAKEUP_VERSION_RESERVED = 2,
+};
+
+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_prmt_module_header {
+ u16 revision;
+ u16 length;
+};
+
+union acpi_subtable_headers;
+
+typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int);
+
+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;
+ struct acpi_cdat_header cdat;
+};
+
+typedef int (*acpi_tbl_entry_handler_arg)(union acpi_subtable_headers *, void *, const long unsigned int);
+
+struct acpi_subtable_proc {
+ int id;
+ acpi_tbl_entry_handler handler;
+ acpi_tbl_entry_handler_arg handler_arg;
+ void *arg;
+ int count;
+};
+
+union fw_table_header {
+ struct acpi_table_header acpi;
+ struct acpi_table_cdat cdat;
+};
+
+typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);
+
+typedef u32 acpi_event_status;
+
+typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);
+
+typedef acpi_status (*acpi_walk_callback)(acpi_handle, u32, void *, 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));
+
+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,
+};
+
+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;
+};
+
+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;
+ int gpe;
+ int irq;
+ long unsigned int command_addr;
+ long unsigned int data_addr;
+ bool global_lock;
+ long unsigned int flags;
+ long unsigned int reference_count;
+ struct mutex mutex;
+ wait_queue_head_t wait;
+ struct list_head list;
+ struct transaction *curr;
+ spinlock_t lock;
+ struct work_struct work;
+ long unsigned int 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;
+ short unsigned int irq_count;
+ u8 command;
+ u8 wi;
+ u8 ri;
+ u8 wlen;
+ u8 rlen;
+ u8 flags;
+};
+
+typedef int (*acpi_ec_query_func)(void *);
+
+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,
+};
+
+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;
+};
+
+struct acpi_lpat {
+ int temp;
+ int raw;
+};
+
+struct acpi_lpat_conversion_table {
+ struct acpi_lpat *lpat;
+ int lpat_count;
+};
+
+typedef void (*acpi_notify_handler)(acpi_handle, u32, void *);
+
+union acpi_operand_object;
+
+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;
+};
+
+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_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;
+};
+
+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;
+};
+
+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_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_register_info;
+
+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_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_xrupt_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_common_state {
+ void *next;
+ u8 descriptor_type;
+ u8 flags;
+ u16 value;
+ u16 state;
+};
+
+struct acpi_update_state {
+ void *next;
+ u8 descriptor_type;
+ u8 flags;
+ u16 value;
+ u16 state;
+ union acpi_operand_object *object;
+};
+
+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_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;
+};
+
+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_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_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 {
+ acpi_notify_handler handler;
+ void *context;
+};
+
+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_opcode_info {
+ u32 parse_args;
+ u32 runtime_args;
+ u16 flags;
+ u8 object_type;
+ u8 class;
+ u8 type;
+};
+
+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;
+};
+
+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;
+};
+
+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 enum {
+ ACPI_IMODE_LOAD_PASS1 = 1,
+ ACPI_IMODE_LOAD_PASS2 = 2,
+ ACPI_IMODE_EXECUTE = 3,
+} acpi_interpreter_mode;
+
+enum {
+ AML_FIELD_UPDATE_PRESERVE = 0,
+ AML_FIELD_UPDATE_WRITE_AS_ONES = 32,
+ AML_FIELD_UPDATE_WRITE_AS_ZEROS = 64,
+};
+
+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,
+};
+
+typedef u32 acpi_mutex_handle;
+
+typedef u16 acpi_rs_length;
+
+typedef u32 acpi_rsdesc_size;
+
+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;
+};
+
+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 aml_resource_small_header {
+ u8 descriptor_type;
+};
+
+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_vendor_small {
+ u8 descriptor_type;
+};
+
+struct aml_resource_end_tag {
+ u8 descriptor_type;
+ u8 checksum;
+};
+
+struct aml_resource_fixed_dma {
+ u8 descriptor_type;
+ u16 request_lines;
+ u16 channels;
+ u8 width;
+} __attribute__((packed));
+
+struct aml_resource_large_header {
+ u8 descriptor_type;
+ u16 resource_length;
+} __attribute__((packed));
+
+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_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_address {
+ u8 descriptor_type;
+ u16 resource_length;
+ u8 resource_type;
+ u8 flags;
+ u8 specific_flags;
+} __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_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_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_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_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_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_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_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_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_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_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_clock_input {
+ u8 descriptor_type;
+ u16 resource_length;
+ u8 revision_id;
+ u16 flags;
+ u16 frequency_divisor;
+ u32 frequency_numerator;
+} __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));
+
+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;
+};
+
+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,
+};
+
+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_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];
+};
+
+enum hwmon_sensor_types {
+ hwmon_chip = 0,
+ hwmon_temp = 1,
+ hwmon_in = 2,
+ hwmon_curr = 3,
+ hwmon_power = 4,
+ hwmon_energy = 5,
+ hwmon_humidity = 6,
+ hwmon_fan = 7,
+ hwmon_pwm = 8,
+ hwmon_intrusion = 9,
+ hwmon_max = 10,
+};
+
+enum hwmon_power_attributes {
+ hwmon_power_enable = 0,
+ hwmon_power_average = 1,
+ hwmon_power_average_interval = 2,
+ hwmon_power_average_interval_max = 3,
+ hwmon_power_average_interval_min = 4,
+ hwmon_power_average_highest = 5,
+ hwmon_power_average_lowest = 6,
+ hwmon_power_average_max = 7,
+ hwmon_power_average_min = 8,
+ hwmon_power_input = 9,
+ hwmon_power_input_highest = 10,
+ hwmon_power_input_lowest = 11,
+ hwmon_power_reset_history = 12,
+ hwmon_power_accuracy = 13,
+ hwmon_power_cap = 14,
+ hwmon_power_cap_hyst = 15,
+ hwmon_power_cap_max = 16,
+ hwmon_power_cap_min = 17,
+ hwmon_power_min = 18,
+ hwmon_power_max = 19,
+ hwmon_power_crit = 20,
+ hwmon_power_lcrit = 21,
+ hwmon_power_label = 22,
+ hwmon_power_alarm = 23,
+ hwmon_power_cap_alarm = 24,
+ hwmon_power_min_alarm = 25,
+ hwmon_power_max_alarm = 26,
+ hwmon_power_lcrit_alarm = 27,
+ hwmon_power_crit_alarm = 28,
+ hwmon_power_rated_min = 29,
+ hwmon_power_rated_max = 30,
+};
+
+enum hwmon_fan_attributes {
+ hwmon_fan_enable = 0,
+ hwmon_fan_input = 1,
+ hwmon_fan_label = 2,
+ hwmon_fan_min = 3,
+ hwmon_fan_max = 4,
+ hwmon_fan_div = 5,
+ hwmon_fan_pulses = 6,
+ hwmon_fan_target = 7,
+ hwmon_fan_alarm = 8,
+ hwmon_fan_min_alarm = 9,
+ hwmon_fan_max_alarm = 10,
+ hwmon_fan_fault = 11,
+ hwmon_fan_beep = 12,
+};
+
+struct hwmon_ops {
+ umode_t (*is_visible)(const void *, enum hwmon_sensor_types, u32, int);
+ int (*read)(struct device *, enum hwmon_sensor_types, u32, int, long int *);
+ int (*read_string)(struct device *, enum hwmon_sensor_types, u32, int, const char **);
+ int (*write)(struct device *, enum hwmon_sensor_types, u32, int, long int);
+};
+
+struct hwmon_channel_info {
+ enum hwmon_sensor_types type;
+ const u32 *config;
+};
+
+struct hwmon_chip_info {
+ const struct hwmon_ops *ops;
+ const struct hwmon_channel_info * const *info;
+};
+
+struct acpi_fan_fps {
+ u64 control;
+ u64 trip_point;
+ u64 speed;
+ u64 noise_level;
+ u64 power;
+ char name[20];
+ struct device_attribute dev_attr;
+};
+
+struct acpi_fan_fif {
+ u8 revision;
+ u8 fine_grain_ctrl;
+ u8 step_size;
+ u8 low_speed_notification;
+};
+
+struct acpi_fan_fst {
+ u64 revision;
+ u64 control;
+ u64 speed;
+};
+
+struct thermal_cooling_device;
+
+struct acpi_fan {
+ bool acpi4;
+ struct acpi_fan_fif fif;
+ struct acpi_fan_fps *fps;
+ int fps_count;
+ struct thermal_cooling_device *cdev;
+ struct device_attribute fst_speed;
+ struct device_attribute fine_grain_control;
+};
+
+enum thermal_device_mode {
+ THERMAL_DEVICE_DISABLED = 0,
+ THERMAL_DEVICE_ENABLED = 1,
+};
+
+enum thermal_trip_type {
+ THERMAL_TRIP_ACTIVE = 0,
+ THERMAL_TRIP_PASSIVE = 1,
+ THERMAL_TRIP_HOT = 2,
+ THERMAL_TRIP_CRITICAL = 3,
+};
+
+enum thermal_trend {
+ THERMAL_TREND_STABLE = 0,
+ THERMAL_TREND_RAISING = 1,
+ THERMAL_TREND_DROPPING = 2,
+};
+
+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,
+ THERMAL_TZ_BIND_CDEV = 9,
+ THERMAL_TZ_UNBIND_CDEV = 10,
+ THERMAL_INSTANCE_WEIGHT_CHANGED = 11,
+ THERMAL_TZ_RESUME = 12,
+};
+
+struct thermal_trip {
+ int temperature;
+ int hysteresis;
+ enum thermal_trip_type type;
+ u8 flags;
+ void *priv;
+};
+
+struct cooling_spec {
+ long unsigned int upper;
+ long unsigned int lower;
+ unsigned int weight;
+};
+
+struct thermal_zone_device;
+
+struct thermal_zone_device_ops {
+ bool (*should_bind)(struct thermal_zone_device *, const struct thermal_trip *, struct thermal_cooling_device *, struct cooling_spec *);
+ 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 *, const struct thermal_trip *, 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 *);
+};
+
+struct thermal_cooling_device_ops;
+
+struct thermal_cooling_device {
+ int id;
+ const char *type;
+ long unsigned int 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;
+};
+
+struct thermal_cooling_device_ops {
+ int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);
+ int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);
+ int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);
+ int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
+ int (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *);
+ int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);
+};
+
+struct thermal_zone_params {
+ const char *governor_name;
+ 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;
+};
+
+struct acpi_handle_list {
+ u32 count;
+ acpi_handle *handles;
+};
+
+struct acpi_thermal_trip {
+ long unsigned int temp_dk;
+ struct acpi_handle_list devices;
+};
+
+struct acpi_thermal_passive {
+ struct acpi_thermal_trip trip;
+ long unsigned int tc1;
+ long unsigned int tc2;
+ long unsigned int delay;
+};
+
+struct acpi_thermal_active {
+ struct acpi_thermal_trip trip;
+};
+
+struct acpi_thermal_trips {
+ struct acpi_thermal_passive passive;
+ struct acpi_thermal_active active[10];
+};
+
+struct acpi_thermal {
+ struct acpi_device *device;
+ acpi_bus_id name;
+ long unsigned int temp_dk;
+ long unsigned int last_temp_dk;
+ long unsigned int polling_frequency;
+ volatile u8 zombie;
+ struct acpi_thermal_trips trips;
+ struct thermal_zone_device *thermal_zone;
+ int kelvin_offset;
+ struct work_struct thermal_check_work;
+ struct mutex thermal_check_lock;
+ refcount_t thermal_check_count;
+};
+
+struct adjust_trip_data {
+ struct acpi_thermal *tz;
+ u32 event;
+};
+
+struct pnp_device_id {
+ __u8 id[8];
+ kernel_ulong_t driver_data;
+};
+
+struct pnp_card_device_id {
+ __u8 id[8];
+ kernel_ulong_t driver_data;
+ struct {
+ __u8 id[8];
+ } devs[8];
+};
+
+struct pnp_protocol;
+
+struct pnp_id;
+
+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_dev;
+
+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_id {
+ char id[8];
+ struct pnp_id *next;
+};
+
+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_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_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_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_fixup {
+ char id[7];
+ void (*quirk_function)(struct pnp_dev *);
+};
+
+struct pnp_port {
+ resource_size_t min;
+ resource_size_t max;
+ resource_size_t align;
+ resource_size_t size;
+ unsigned char flags;
+};
+
+typedef struct {
+ long unsigned int 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;
+ long unsigned int type;
+ union {
+ struct pnp_port port;
+ struct pnp_irq irq;
+ struct pnp_dma dma;
+ struct pnp_mem mem;
+ } u;
+};
+
+struct pnp_resource {
+ struct list_head list;
+ struct resource res;
+};
+
+struct clk;
+
+struct clk_bulk_data {
+ const char *id;
+ struct clk *clk;
+};
+
+struct clk_core;
+
+struct clk_hw;
+
+struct clk_rate_request {
+ struct clk_core *core;
+ long unsigned int rate;
+ long unsigned int min_rate;
+ long unsigned int max_rate;
+ long unsigned int best_parent_rate;
+ struct clk_hw *best_parent_hw;
+};
+
+struct clk_init_data;
+
+struct clk_hw {
+ struct clk_core *core;
+ struct clk *clk;
+ const struct clk_init_data *init;
+};
+
+struct clk_duty {
+ unsigned int num;
+ unsigned int den;
+};
+
+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 *);
+ long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
+ long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
+ 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 *, long unsigned int, long unsigned int);
+ int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
+ long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
+ 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 *);
+};
+
+struct clk_parent_data {
+ const struct clk_hw *hw;
+ const char *fw_name;
+ const char *name;
+ int index;
+};
+
+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;
+ long unsigned int flags;
+};
+
+struct clk_gate {
+ struct clk_hw hw;
+ void *reg;
+ u8 bit_idx;
+ u8 flags;
+ spinlock_t *lock;
+};
+
+struct wrpll_cfg {
+ u8 divr;
+ u8 divq;
+ u8 range;
+ u8 flags;
+ u16 divf;
+ u32 output_rate_cache[6];
+ long unsigned int parent_rate;
+ u8 max_r;
+ u8 init_r;
+};
+
+struct cv1800_clk_common {
+ void *base;
+ spinlock_t *lock;
+ struct clk_hw hw;
+ long unsigned int features;
+};
+
+struct cv1800_clk_regbit {
+ u16 reg;
+ s8 shift;
+};
+
+struct clk_hw_onecell_data {
+ unsigned int num;
+ struct clk_hw *hws[0];
+};
+
+struct ccu_common {
+ void *base;
+ u16 reg;
+ u16 lock_reg;
+ u32 prediv;
+ long unsigned int min_rate;
+ long unsigned int max_rate;
+ long unsigned int features;
+ spinlock_t *lock;
+ struct clk_hw hw;
+};
+
+struct ccu_reset_map;
+
+struct sunxi_ccu_desc {
+ struct ccu_common **ccu_clks;
+ long unsigned int num_ccu_clks;
+ struct clk_hw_onecell_data *hw_clks;
+ struct ccu_reset_map *resets;
+ long unsigned int num_resets;
+};
+
+struct ccu_reset_map {
+ u16 reg;
+ u32 bit;
+};
+
+struct ccu_pll_nb {
+ struct notifier_block clk_nb;
+ struct ccu_common *common;
+ u32 enable;
+ u32 lock;
+};
+
+struct reset_controller_dev;
+
+struct reset_control_ops {
+ int (*reset)(struct reset_controller_dev *, long unsigned int);
+ int (*assert)(struct reset_controller_dev *, long unsigned int);
+ int (*deassert)(struct reset_controller_dev *, long unsigned int);
+ int (*status)(struct reset_controller_dev *, long unsigned int);
+};
+
+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;
+ const struct of_phandle_args *of_args;
+ int of_reset_n_cells;
+ int (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);
+ unsigned int nr_resets;
+};
+
+struct ccu_reset {
+ void *base;
+ struct ccu_reset_map *reset_map;
+ spinlock_t *lock;
+ struct reset_controller_dev rcdev;
+};
+
+struct sunxi_ccu {
+ const struct sunxi_ccu_desc *desc;
+ spinlock_t lock;
+ struct ccu_reset reset;
+};
+
+struct ccu_frac_internal {
+ u32 enable;
+ u32 select;
+ long unsigned int rates[2];
+};
+
+struct ccu_sdm_setting {
+ long unsigned int rate;
+ u32 pattern;
+ u32 m;
+ u32 n;
+};
+
+struct ccu_sdm_internal {
+ struct ccu_sdm_setting *table;
+ u32 table_size;
+ u32 enable;
+ u32 tuning_enable;
+ u16 tuning_reg;
+};
+
+struct clk_div_table {
+ unsigned int val;
+ unsigned int div;
+};
+
+struct clk_fixed_factor {
+ struct clk_hw hw;
+ unsigned int mult;
+ unsigned int div;
+ long unsigned int acc;
+ unsigned int flags;
+};
+
+enum regcache_type {
+ REGCACHE_NONE = 0,
+ REGCACHE_RBTREE = 1,
+ REGCACHE_FLAT = 2,
+ REGCACHE_MAPLE = 3,
+};
+
+struct reg_default {
+ unsigned int reg;
+ unsigned int def;
+};
+
+enum regmap_endian {
+ REGMAP_ENDIAN_DEFAULT = 0,
+ REGMAP_ENDIAN_BIG = 1,
+ REGMAP_ENDIAN_LITTLE = 2,
+ REGMAP_ENDIAN_NATIVE = 3,
+};
+
+struct regmap_range {
+ unsigned int range_min;
+ unsigned int range_max;
+};
+
+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;
+};
+
+typedef void (*regmap_lock)(void *);
+
+typedef void (*regmap_unlock)(void *);
+
+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);
+ 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 can_sleep;
+ bool fast_io;
+ bool io_port;
+ bool disable_locking;
+ regmap_lock lock;
+ regmap_unlock unlock;
+ void *lock_arg;
+ unsigned int max_register;
+ bool max_register_is_0;
+ 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;
+ long unsigned int read_flag_mask;
+ long unsigned int write_flag_mask;
+ bool zero_flag_mask;
+ bool use_single_read;
+ bool use_single_write;
+ bool use_relaxed_mmio;
+ bool can_multi_write;
+ bool use_hwlock;
+ bool use_raw_spinlock;
+ unsigned int hwlock_id;
+ unsigned int hwlock_mode;
+ enum regmap_endian reg_format_endian;
+ enum regmap_endian val_format_endian;
+ const struct regmap_range_cfg *ranges;
+ unsigned int num_ranges;
+};
+
+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;
+};
+
+struct ccu_internal {
+ u8 shift;
+ u8 width;
+};
+
+struct ccu_div_internal {
+ u8 shift;
+ u8 width;
+ u32 flags;
+};
+
+struct regmap;
+
+struct ccu_common___2 {
+ int clkid;
+ struct regmap *map;
+ u16 cfg0;
+ u16 cfg1;
+ struct clk_hw hw;
+};
+
+struct ccu_mux {
+ struct ccu_internal mux;
+ struct ccu_common___2 common;
+};
+
+struct ccu_gate {
+ u32 enable;
+ struct ccu_common___2 common;
+};
+
+struct ccu_div {
+ u32 enable;
+ struct ccu_div_internal div;
+ struct ccu_internal mux;
+ struct ccu_common___2 common;
+};
+
+struct ccu_pll {
+ struct ccu_common___2 common;
+};
+
+struct pm_domain_data {
+ struct list_head list_node;
+ struct device *dev;
+};
+
+enum gpd_status {
+ GENPD_STATE_ON = 0,
+ GENPD_STATE_OFF = 1,
+};
+
+struct dev_power_governor {
+ bool (*power_down_ok)(struct dev_pm_domain *);
+ bool (*suspend_ok)(struct device *);
+};
+
+struct gpd_dev_ops {
+ int (*start)(struct device *);
+ int (*stop)(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 opp_table;
+
+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 device_id;
+ 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;
+ int (*set_performance_state)(struct generic_pm_domain *, unsigned int);
+ struct gpd_dev_ops dev_ops;
+ int (*set_hwmode_dev)(struct generic_pm_domain *, struct device *, bool);
+ bool (*get_hwmode_dev)(struct generic_pm_domain *, struct device *);
+ 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;
+ long unsigned int lock_flags;
+ };
+ struct {
+ raw_spinlock_t raw_slock;
+ long unsigned int raw_lock_flags;
+ };
+ };
+};
+
+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 *);
+};
+
+typedef struct generic_pm_domain * (*genpd_xlate_t)(const struct of_phandle_args *, void *);
+
+struct genpd_onecell_data {
+ struct generic_pm_domain **domains;
+ unsigned int num_domains;
+ genpd_xlate_t xlate;
+};
+
+struct jh71xx_domain_info {
+ const char * const name;
+ unsigned int flags;
+ u8 bit;
+};
+
+struct jh71xx_pmu;
+
+struct jh71xx_pmu_dev;
+
+struct jh71xx_pmu_match_data {
+ const struct jh71xx_domain_info *domain_info;
+ int num_domains;
+ unsigned int pmu_status;
+ int (*pmu_parse_irq)(struct platform_device *, struct jh71xx_pmu *);
+ int (*pmu_set_state)(struct jh71xx_pmu_dev *, u32, bool);
+};
+
+struct jh71xx_pmu {
+ struct device *dev;
+ const struct jh71xx_pmu_match_data *match_data;
+ void *base;
+ struct generic_pm_domain **genpd;
+ struct genpd_onecell_data genpd_data;
+ int irq;
+ spinlock_t lock;
+};
+
+struct jh71xx_pmu_dev {
+ const struct jh71xx_domain_info *domain_info;
+ struct jh71xx_pmu *pmu;
+ struct generic_pm_domain genpd;
+};
+
+struct virtio_device_id {
+ __u32 device;
+ __u32 vendor;
+};
+
+struct virtio_device;
+
+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 vringh_config_ops;
+
+struct virtio_config_ops;
+
+struct virtio_device {
+ int index;
+ bool failed;
+ bool config_core_enabled;
+ bool config_driver_disabled;
+ 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_info;
+
+struct irq_affinity;
+
+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 **, struct virtqueue_info *, 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 *);
+};
+
+typedef __u16 __virtio16;
+
+typedef __u32 __virtio32;
+
+typedef __u64 __virtio64;
+
+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];
+};
+
+typedef struct vring_desc vring_desc_t;
+
+typedef struct vring_avail vring_avail_t;
+
+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_packed_desc_event {
+ __le16 off_wrap;
+ __le16 flags;
+};
+
+struct vring_packed_desc {
+ __le64 addr;
+ __le32 len;
+ __le16 id;
+ __le16 flags;
+};
+
+struct virtio_shm_region {
+ u64 addr;
+ u64 len;
+};
+
+typedef void vq_callback_t(struct virtqueue *);
+
+struct virtqueue_info {
+ const char *name;
+ vq_callback_t *callback;
+ bool ctx;
+};
+
+enum xen_domain_type {
+ XEN_NATIVE = 0,
+ XEN_PV_DOMAIN = 1,
+ XEN_HVM_DOMAIN = 2,
+};
+
+struct vring_desc_state_split {
+ void *data;
+ struct vring_desc *indir_desc;
+};
+
+struct vring_desc_state_packed {
+ void *data;
+ struct vring_packed_desc *indir_desc;
+ u16 num;
+ u16 last;
+};
+
+struct vring_desc_extra {
+ dma_addr_t addr;
+ u32 len;
+ u16 flags;
+ u16 next;
+};
+
+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_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;
+};
+
+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 virtio_admin_cmd {
+ __le16 opcode;
+ __le16 group_type;
+ __le64 group_member_id;
+ struct scatterlist *data_sg;
+ struct scatterlist *result_sg;
+ struct completion completion;
+ int ret;
+};
+
+struct virtio_pci_common_cfg {
+ __le32 device_feature_select;
+ __le32 device_feature;
+ __le32 guest_feature_select;
+ __le32 guest_feature;
+ __le16 msix_config;
+ __le16 num_queues;
+ __u8 device_status;
+ __u8 config_generation;
+ __le16 queue_select;
+ __le16 queue_size;
+ __le16 queue_msix_vector;
+ __le16 queue_enable;
+ __le16 queue_notify_off;
+ __le32 queue_desc_lo;
+ __le32 queue_desc_hi;
+ __le32 queue_avail_lo;
+ __le32 queue_avail_hi;
+ __le32 queue_used_lo;
+ __le32 queue_used_hi;
+};
+
+struct virtio_pci_modern_common_cfg {
+ struct virtio_pci_common_cfg cfg;
+ __le16 queue_notify_data;
+ __le16 queue_reset;
+ __le16 admin_queue_index;
+ __le16 admin_queue_num;
+};
+
+struct virtio_admin_cmd_hdr {
+ __le16 opcode;
+ __le16 group_type;
+ __u8 reserved1[12];
+ __le64 group_member_id;
+};
+
+struct virtio_admin_cmd_status {
+ __le16 status;
+ __le16 status_qualifier;
+ __u8 reserved2[4];
+};
+
+struct virtio_pci_legacy_device {
+ struct pci_dev *pci_dev;
+ u8 *isr;
+ void *ioaddr;
+ struct virtio_device_id id;
+};
+
+struct virtio_pci_modern_device {
+ struct pci_dev *pci_dev;
+ struct virtio_pci_common_cfg *common;
+ void *device;
+ void *notify_base;
+ resource_size_t notify_pa;
+ u8 *isr;
+ size_t notify_len;
+ size_t device_len;
+ size_t common_len;
+ int notify_map_cap;
+ u32 notify_offset_multiplier;
+ int modern_bars;
+ struct virtio_device_id id;
+ int (*device_id_check)(struct pci_dev *);
+ u64 dma_mask;
+};
+
+struct virtio_pci_vq_info {
+ struct virtqueue *vq;
+ struct list_head node;
+ unsigned int msix_vector;
+};
+
+struct virtio_pci_admin_vq {
+ struct virtio_pci_vq_info *info;
+ spinlock_t lock;
+ u64 supported_cmds;
+ char name[10];
+ u16 vq_index;
+};
+
+struct virtio_pci_device {
+ struct virtio_device vdev;
+ struct pci_dev *pci_dev;
+ union {
+ struct virtio_pci_legacy_device ldev;
+ struct virtio_pci_modern_device mdev;
+ };
+ bool is_legacy;
+ u8 *isr;
+ spinlock_t lock;
+ struct list_head virtqueues;
+ struct list_head slow_virtqueues;
+ struct virtio_pci_vq_info **vqs;
+ struct virtio_pci_admin_vq admin_vq;
+ int msix_enabled;
+ int intx_enabled;
+ cpumask_var_t *msix_affinity_masks;
+ char (*msix_names)[256];
+ unsigned int msix_vectors;
+ unsigned int msix_used_vectors;
+ bool per_vq_vectors;
+ struct virtqueue * (*setup_vq)(struct virtio_pci_device *, struct virtio_pci_vq_info *, unsigned int, void (*)(struct virtqueue *), const char *, bool, u16);
+ void (*del_vq)(struct virtio_pci_vq_info *);
+ u16 (*config_vector)(struct virtio_pci_device *, u16);
+ int (*avq_index)(struct virtio_device *, u16 *, u16 *);
+};
+
+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 uv_less_critical_window_ms;
+ 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 system_critical: 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 {
+ const char *dev_name;
+ const char *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 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;
+
+struct regulator_bulk_data {
+ const char *supply;
+ struct regulator *consumer;
+ int init_load_uA;
+ int ret;
+};
+
+struct regulator_voltage {
+ int min_uV;
+ int max_uV;
+};
+
+struct regulator_dev;
+
+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;
+};
+
+enum regulator_active_discharge {
+ REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
+ REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
+ REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
+};
+
+struct linear_range {
+ unsigned int min;
+ unsigned int min_sel;
+ unsigned int max_sel;
+ unsigned int step;
+};
+
+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 ww_mutex {
+ struct mutex base;
+ struct ww_acquire_ctx *ctx;
+ struct ww_class *ww_class;
+};
+
+struct ww_acquire_ctx {
+ struct task_struct *task;
+ long unsigned int stamp;
+ unsigned int acquired;
+ short unsigned int wounded;
+ short unsigned int is_wait_die;
+ unsigned int done_acquire;
+ struct ww_class *ww_class;
+ void *contending_lock;
+};
+
+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 *);
+};
+
+struct regulator_coupler;
+
+struct coupling_desc {
+ struct regulator_dev **coupled_rdevs;
+ struct regulator_coupler *coupler;
+ int n_resolved;
+ int n_coupled;
+};
+
+struct regulator_desc;
+
+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;
+};
+
+enum regulator_type {
+ REGULATOR_VOLTAGE = 0,
+ REGULATOR_CURRENT = 1,
+};
+
+struct regulator_config;
+
+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;
+ bool range_applied_by_vsel;
+ 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);
+};
+
+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 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 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 reset_simple_devdata {
+ u32 reg_offset;
+ u32 nr_resets;
+ bool active_low;
+ bool status_active_low;
+};
+
+struct vt_notifier_param {
+ struct vc_data *vc;
+ unsigned int c;
+};
+
+struct vcs_poll_data {
+ struct notifier_block notifier;
+ unsigned int cons_num;
+ int event;
+ wait_queue_head_t waitq;
+ struct fasync_struct *fasync;
+};
+
+struct ida {
+ struct xarray xa;
+};
+
+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;
+ short unsigned int close_delay;
+ char io_type;
+ char reserved_char[1];
+ int hub6;
+ short unsigned int closing_wait;
+ short unsigned int closing_wait2;
+ unsigned char *iomem_base;
+ short unsigned int iomem_reg_shift;
+ unsigned int port_high;
+ long unsigned int iomap_base;
+};
+
+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,
+ CON_NBCON = 256,
+};
+
+enum nbcon_prio {
+ NBCON_PRIO_NONE = 0,
+ NBCON_PRIO_NORMAL = 1,
+ NBCON_PRIO_EMERGENCY = 2,
+ NBCON_PRIO_PANIC = 3,
+ NBCON_PRIO_MAX = 4,
+};
+
+struct console;
+
+struct printk_buffers;
+
+struct nbcon_context {
+ struct console *console;
+ unsigned int spinwait_max_us;
+ enum nbcon_prio prio;
+ unsigned int allow_unsafe_takeover: 1;
+ unsigned int backlog: 1;
+ struct printk_buffers *pbufs;
+ u64 seq;
+};
+
+struct nbcon_write_context;
+
+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 int flags;
+ short int index;
+ int cflag;
+ uint ispeed;
+ uint ospeed;
+ u64 seq;
+ long unsigned int dropped;
+ void *data;
+ struct hlist_node node;
+ void (*write_atomic)(struct console *, struct nbcon_write_context *);
+ void (*write_thread)(struct console *, struct nbcon_write_context *);
+ void (*device_lock)(struct console *, long unsigned int *);
+ void (*device_unlock)(struct console *, long unsigned int);
+ atomic_t nbcon_state;
+ atomic_long_t nbcon_seq;
+ struct nbcon_context nbcon_device_ctxt;
+ atomic_long_t nbcon_prev_seq;
+ struct printk_buffers *pbufs;
+ struct task_struct *kthread;
+ struct rcuwait rcuwait;
+ struct irq_work irq_work;
+};
+
+struct nbcon_write_context {
+ struct nbcon_context ctxt;
+ char *outbuf;
+ unsigned int len;
+ bool unsafe_takeover;
+};
+
+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_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, long unsigned int);
+};
+
+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 uart_state;
+
+struct serial_port_device;
+
+struct uart_port {
+ spinlock_t lock;
+ long unsigned int 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;
+ long unsigned int 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;
+ long unsigned int 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;
+};
+
+enum uart_pm_state {
+ UART_PM_STATE_ON = 0,
+ UART_PM_STATE_OFF = 3,
+ UART_PM_STATE_UNDEFINED = 4,
+};
+
+struct uart_state {
+ struct tty_port port;
+ enum uart_pm_state pm_state;
+ atomic_t refcount;
+ wait_queue_head_t remove_wait;
+ struct uart_port *uart_port;
+};
+
+struct serial_port_device {
+ struct device dev;
+ struct uart_port *port;
+ unsigned int tx_enabled: 1;
+};
+
+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;
+};
+
+struct serial_ctrl_device {
+ struct device dev;
+ struct ida port_ida;
+};
+
+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_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 dma_chan;
+
+typedef bool (*dma_filter_fn)(struct dma_chan *, void *);
+
+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_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;
+};
+
+typedef s32 dma_cookie_t;
+
+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;
+};
+
+enum dma_status {
+ DMA_COMPLETE = 0,
+ DMA_IN_PROGRESS = 1,
+ DMA_PAUSED = 2,
+ DMA_ERROR = 3,
+ DMA_OUT_OF_ORDER = 4,
+};
+
+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 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_vec {
+ dma_addr_t addr;
+ size_t len;
+};
+
+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,
+};
+
+enum sum_check_bits {
+ SUM_CHECK_P = 0,
+ SUM_CHECK_Q = 1,
+};
+
+enum sum_check_flags {
+ SUM_CHECK_P_RESULT = 1,
+ SUM_CHECK_Q_RESULT = 2,
+};
+
+typedef struct {
+ long unsigned int bits[1];
+} dma_cap_mask_t;
+
+enum dma_desc_metadata_mode {
+ DESC_METADATA_NONE = 0,
+ DESC_METADATA_CLIENT = 1,
+ DESC_METADATA_ENGINE = 2,
+};
+
+struct dma_chan_percpu {
+ long unsigned int memcpy_count;
+ long unsigned int bytes_transferred;
+};
+
+struct dma_router {
+ struct device *dev;
+ void (*route_free)(struct device *, void *);
+};
+
+struct dma_device;
+
+struct dma_chan_dev;
+
+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 *local;
+ int client_count;
+ int table_count;
+ struct dma_router *router;
+ void *route_data;
+ void *private;
+};
+
+struct dma_slave_map;
+
+struct dma_filter {
+ dma_filter_fn fn;
+ int mapcnt;
+ const struct dma_slave_map *map;
+};
+
+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,
+};
+
+struct dma_async_tx_descriptor;
+
+struct dma_slave_caps;
+
+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;
+ short unsigned int max_xor;
+ short unsigned int 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, long unsigned int);
+ struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
+ struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
+ 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, long unsigned int);
+ 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 *, long unsigned int);
+ struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan *, dma_addr_t, int, size_t, long unsigned int);
+ struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan *, struct scatterlist *, unsigned int, int, long unsigned int);
+ struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan *, long unsigned int);
+ struct dma_async_tx_descriptor * (*device_prep_peripheral_dma_vec)(struct dma_chan *, const struct dma_vec *, size_t, enum dma_transfer_direction, long unsigned int);
+ struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
+ struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
+ struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan *, struct dma_interleaved_template *, long unsigned int);
+ struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan *, dma_addr_t, u64, long unsigned int);
+ 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_chan_dev {
+ struct dma_chan *chan;
+ struct device device;
+ int dev_id;
+ bool chan_dma_dev;
+};
+
+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;
+};
+
+typedef void (*dma_async_tx_callback)(void *);
+
+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;
+};
+
+typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
+
+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 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_tx_state {
+ dma_cookie_t last;
+ dma_cookie_t used;
+ u32 residue;
+ u32 in_flight_bytes;
+};
+
+struct dma_slave_map {
+ const char *devname;
+ const char *slave;
+ void *param;
+};
+
+struct pericom8250 {
+ void *virt;
+ unsigned int nr;
+ int line[0];
+};
+
+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);
+ long unsigned int priv;
+ short unsigned int quality;
+ struct list_head list;
+ struct kref ref;
+ struct completion cleanup_done;
+ struct completion dying;
+};
+
+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 virtrng_info {
+ struct hwrng hwrng;
+ struct virtqueue *vq;
+ char name[25];
+ int index;
+ bool hwrng_register_done;
+ bool hwrng_removed;
+ struct completion have_data;
+ unsigned int data_avail;
+ unsigned int data_idx;
+ u8 data[64];
+};
+
+struct iommu_fault_param;
+
+struct iommu_fwspec;
+
+struct iommu_device;
+
+struct dev_iommu {
+ struct mutex lock;
+ struct iommu_fault_param *fault_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;
+ u32 shadow_on_flush: 1;
+};
+
+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 iova_bitmap;
+
+struct iommu_fault_page_request {
+ u32 flags;
+ u32 pasid;
+ u32 grpid;
+ u32 perm;
+ u64 addr;
+ u64 private_data[2];
+};
+
+struct iommu_fault {
+ u32 type;
+ struct iommu_fault_page_request prm;
+};
+
+struct iommu_page_response {
+ u32 pasid;
+ u32 grpid;
+ u32 code;
+};
+
+struct iopf_fault {
+ struct iommu_fault fault;
+ struct list_head list;
+};
+
+struct iommu_attach_handle;
+
+struct iopf_group {
+ struct iopf_fault last_fault;
+ struct list_head faults;
+ size_t fault_count;
+ struct list_head pending_node;
+ struct work_struct work;
+ struct iommu_attach_handle *attach_handle;
+ struct iommu_fault_param *fault_param;
+ struct list_head node;
+ u32 cookie;
+};
+
+struct iommu_domain;
+
+struct iommu_attach_handle {
+ struct iommu_domain *domain;
+};
+
+struct iopf_queue;
+
+struct iommu_fault_param {
+ struct mutex lock;
+ refcount_t users;
+ struct callback_head rcu;
+ struct device *dev;
+ struct iopf_queue *queue;
+ struct list_head queue_list;
+ struct list_head partial;
+ struct list_head faults;
+};
+
+struct iopf_queue {
+ struct workqueue_struct *wq;
+ struct list_head devices;
+ struct mutex lock;
+};
+
+typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, 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_domain_ops;
+
+struct iommu_dirty_ops;
+
+struct iommu_ops;
+
+struct iommu_domain {
+ unsigned int type;
+ const struct iommu_domain_ops *ops;
+ const struct iommu_dirty_ops *dirty_ops;
+ const struct iommu_ops *owner;
+ long unsigned int pgsize_bitmap;
+ struct iommu_domain_geometry geometry;
+ struct iommu_dma_cookie *iova_cookie;
+ int (*iopf_handler)(struct iopf_group *);
+ void *fault_data;
+ union {
+ struct {
+ iommu_fault_handler_t handler;
+ void *handler_token;
+ };
+ struct {
+ struct mm_struct *mm;
+ int users;
+ struct list_head next;
+ };
+ };
+};
+
+typedef unsigned int ioasid_t;
+
+struct iommu_iotlb_gather;
+
+struct iommu_user_data_array;
+
+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_pages)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+ size_t (*unmap_pages)(struct iommu_domain *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *);
+ void (*flush_iotlb_all)(struct iommu_domain *);
+ int (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t);
+ void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
+ int (*cache_invalidate_user)(struct iommu_domain *, struct iommu_user_data_array *);
+ 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 *, long unsigned int);
+ void (*free)(struct iommu_domain *);
+};
+
+struct iommu_dirty_bitmap;
+
+struct iommu_dirty_ops {
+ int (*set_dirty_tracking)(struct iommu_domain *, bool);
+ int (*read_and_clear_dirty)(struct iommu_domain *, long unsigned int, size_t, long unsigned int, struct iommu_dirty_bitmap *);
+};
+
+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,
+ IOMMU_CAP_DIRTY_TRACKING = 5,
+};
+
+enum iommu_dev_features {
+ IOMMU_DEV_FEAT_SVA = 0,
+ IOMMU_DEV_FEAT_IOPF = 1,
+};
+
+struct iommu_user_data;
+
+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_domain * (*domain_alloc_user)(struct device *, u32, struct iommu_domain *, const struct iommu_user_data *);
+ struct iommu_domain * (*domain_alloc_paging)(struct device *);
+ struct iommu_domain * (*domain_alloc_sva)(struct device *, struct mm_struct *);
+ struct iommu_device * (*probe_device)(struct device *);
+ void (*release_device)(struct device *);
+ void (*probe_finalize)(struct device *);
+ struct iommu_group * (*device_group)(struct device *);
+ void (*get_resv_regions)(struct device *, struct list_head *);
+ int (*of_xlate)(struct device *, const 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);
+ void (*page_response)(struct device *, struct iopf_fault *, struct iommu_page_response *);
+ int (*def_domain_type)(struct device *);
+ void (*remove_dev_pasid)(struct device *, ioasid_t, struct iommu_domain *);
+ const struct iommu_domain_ops *default_domain_ops;
+ long unsigned int pgsize_bitmap;
+ struct module *owner;
+ struct iommu_domain *identity_domain;
+ struct iommu_domain *blocked_domain;
+ struct iommu_domain *release_domain;
+ struct iommu_domain *default_domain;
+ u8 user_pasid_table: 1;
+};
+
+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,
+};
+
+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 iommu_iotlb_gather {
+ long unsigned int start;
+ long unsigned int end;
+ size_t pgsize;
+ struct list_head freelist;
+ bool queued;
+};
+
+struct iommu_dirty_bitmap {
+ struct iova_bitmap *bitmap;
+ struct iommu_iotlb_gather *gather;
+};
+
+struct iommu_user_data {
+ unsigned int type;
+ void *uptr;
+ size_t len;
+};
+
+struct iommu_user_data_array {
+ unsigned int type;
+ void *uptr;
+ size_t entry_len;
+ u32 entry_num;
+};
+
+struct iommu_device {
+ struct list_head list;
+ const struct iommu_ops *ops;
+ struct fwnode_handle *fwnode;
+ struct device *dev;
+ struct iommu_group *singleton_group;
+ u32 max_pasids;
+};
+
+struct iommu_fwspec {
+ struct fwnode_handle *iommu_fwnode;
+ u32 flags;
+ unsigned int num_ids;
+ u32 ids[0];
+};
+
+struct of_pci_iommu_alias_info {
+ struct device *dev;
+ struct device_node *np;
+};
+
+struct klist_node;
+
+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;
+};
+
+struct klist_iter {
+ struct klist *i_klist;
+ struct klist_node *i_cur;
+};
+
+struct wake_irq {
+ struct device *dev;
+ unsigned int status;
+ int irq;
+ const 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);
+};
+
+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;
+};
+
+struct driver_private {
+ struct kobject kobj;
+ struct klist klist_devices;
+ struct klist_node knode_bus;
+ struct module_kobject *mkobj;
+ struct device_driver *driver;
+};
+
+struct driver_attribute {
+ struct attribute attr;
+ ssize_t (*show)(struct device_driver *, char *);
+ ssize_t (*store)(struct device_driver *, const char *, size_t);
+};
+
+struct subsys_interface {
+ const char *name;
+ const 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 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;
+ const struct device_driver *async_driver;
+ char *deferred_probe_reason;
+ struct device *device;
+ u8 dead: 1;
+};
+
+struct subsys_dev_iter {
+ struct klist_iter ki;
+ const struct device_type *type;
+};
+
+struct cpu {
+ int node_id;
+ int hotpluggable;
+ struct device dev;
+};
+
+struct cpu_attr {
+ struct device_attribute attr;
+ const struct cpumask * const map;
+};
+
+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 *);
+ long unsigned int 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 req {
+ struct req *next;
+ struct completion done;
+ int err;
+ const char *name;
+ umode_t mode;
+ kuid_t uid;
+ kgid_t gid;
+ struct device *dev;
+};
+
+struct pm_clk_notifier_block {
+ struct notifier_block nb;
+ struct dev_pm_domain *pm_domain;
+ char *con_ids[0];
+};
+
+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;
+};
+
+typedef int (*dr_match_t)(struct device *, void *, void *);
+
+struct reg_sequence {
+ unsigned int reg;
+ unsigned int def;
+ unsigned int delay_us;
+};
+
+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 *);
+
+struct regmap_async {
+ struct list_head list;
+ struct regmap *map;
+ void *work_buf;
+};
+
+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 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 struct regmap_async * (*regmap_hw_async_alloc)();
+
+typedef void (*regmap_hw_free_context)(void *);
+
+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;
+};
+
+struct reg_field {
+ unsigned int reg;
+ unsigned int lsb;
+ unsigned int msb;
+ unsigned int id_size;
+ unsigned int id_offset;
+};
+
+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 hwspinlock;
+
+struct regcache_ops;
+
+struct regmap {
+ union {
+ struct mutex mutex;
+ struct {
+ spinlock_t spinlock;
+ long unsigned int spinlock_flags;
+ };
+ struct {
+ raw_spinlock_t raw_spinlock;
+ long unsigned int 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 max_register_is_set;
+ 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;
+ long unsigned int read_flag_mask;
+ long unsigned int 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 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 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 regmap_field {
+ struct regmap *regmap;
+ unsigned int mask;
+ unsigned int shift;
+ unsigned int reg;
+ unsigned int id_size;
+ unsigned int id_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 regmap_irq_sub_irq_map {
+ unsigned int num_regs;
+ unsigned int *offset;
+};
+
+struct regmap_irq_chip_data;
+
+struct regmap_irq_chip {
+ const char *name;
+ const char *domain_suffix;
+ unsigned int main_status;
+ unsigned int num_main_status_bits;
+ const 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_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;
+};
+
+typedef unsigned int __kernel_old_dev_t;
+
+typedef struct {
+ int val[2];
+} __kernel_fsid_t;
+
+typedef u32 compat_dev_t;
+
+typedef __kernel_rwf_t rwf_t;
+
+struct kstatfs {
+ long int f_type;
+ long int f_bsize;
+ u64 f_blocks;
+ u64 f_bfree;
+ u64 f_bavail;
+ u64 f_files;
+ u64 f_ffree;
+ __kernel_fsid_t f_fsid;
+ long int f_namelen;
+ long int f_frsize;
+ long int f_flags;
+ long int f_spare[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,
+};
+
+struct req_iterator {
+ struct bvec_iter iter;
+ struct bio *bio;
+};
+
+enum {
+ LO_FLAGS_READ_ONLY = 1,
+ LO_FLAGS_AUTOCLEAR = 4,
+ LO_FLAGS_PARTSCAN = 8,
+ LO_FLAGS_DIRECT_IO = 16,
+};
+
+struct loop_info {
+ int lo_number;
+ __kernel_old_dev_t lo_device;
+ long unsigned int 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];
+ long unsigned int 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];
+};
+
+enum {
+ Lo_unbound = 0,
+ Lo_bound = 1,
+ Lo_rundown = 2,
+ Lo_deleting = 3,
+};
+
+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_cmd {
+ struct list_head list_entry;
+ bool use_aio;
+ atomic_t ref;
+ long int ret;
+ struct kiocb iocb;
+ struct bio_vec *bvec;
+ struct cgroup_subsys_state *blkcg_css;
+ struct cgroup_subsys_state *memcg_css;
+};
+
+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;
+ long unsigned int last_ran_at;
+};
+
+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 nd_cmd_get_config_size {
+ __u32 status;
+ __u32 config_size;
+ __u32 max_xfer;
+};
+
+enum nd_driver_flags {
+ ND_DRIVER_DIMM = 2,
+ ND_DRIVER_REGION_PMEM = 4,
+ ND_DRIVER_REGION_BLK = 8,
+ ND_DRIVER_NAMESPACE_IO = 16,
+ ND_DRIVER_NAMESPACE_PMEM = 32,
+ ND_DRIVER_DAX_PMEM = 128,
+};
+
+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;
+};
+
+enum nvdimm_event {
+ NVDIMM_REVALIDATE_POISON = 0,
+ NVDIMM_REVALIDATE_REGION = 1,
+};
+
+struct nd_device_driver {
+ struct device_driver drv;
+ long unsigned int type;
+ int (*probe)(struct device *);
+ void (*remove)(struct device *);
+ void (*shutdown)(struct device *);
+ void (*notify)(struct device *, enum nvdimm_event);
+};
+
+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,
+};
+
+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,
+};
+
+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 nvdimm_security_ops;
+
+struct nvdimm_fw_ops;
+
+struct nvdimm {
+ long unsigned int flags;
+ void *provider_data;
+ long unsigned int 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;
+ long unsigned int flags;
+ long unsigned int ext_flags;
+ unsigned int overwrite_tmo;
+ struct kernfs_node *overwrite_state;
+ } sec;
+ struct delayed_work dwork;
+ const struct nvdimm_fw_ops *fw_ops;
+};
+
+struct nd_interleave_set {
+ u64 cookie1;
+ u64 cookie2;
+ u64 altcookie;
+ guid_t type_guid;
+};
+
+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_percpu_lane;
+
+struct nd_region {
+ struct device dev;
+ struct ida ns_ida;
+ struct ida btt_ida;
+ struct ida pfn_ida;
+ struct ida dax_ida;
+ long unsigned int flags;
+ struct device *ns_seed;
+ struct device *btt_seed;
+ struct device *pfn_seed;
+ struct device *dax_seed;
+ long unsigned int 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 *lane;
+ int (*flush)(struct nd_region *, struct bio *);
+ struct nd_mapping mapping[0];
+};
+
+struct nvdimm_key_data {
+ u8 data[32];
+};
+
+enum nvdimm_passphrase_type {
+ NVDIMM_USER = 0,
+ NVDIMM_MASTER = 1,
+};
+
+struct nvdimm_security_ops {
+ long unsigned int (*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 *);
+};
+
+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_trigger {
+ NVDIMM_FWA_ARM = 0,
+ NVDIMM_FWA_DISARM = 1,
+};
+
+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,
+};
+
+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);
+};
+
+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,
+};
+
+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, long unsigned int);
+};
+
+struct nd_percpu_lane {
+ int count;
+ spinlock_t lock;
+};
+
+struct btt;
+
+struct nd_btt {
+ struct device dev;
+ struct nd_namespace_common *ndns;
+ struct btt *btt;
+ long unsigned int lbasize;
+ u64 size;
+ uuid_t *uuid;
+ int id;
+ int initial_offset;
+ u16 version_major;
+ u16 version_minor;
+};
+
+struct btt {
+ struct gendisk *btt_disk;
+ struct list_head arena_list;
+ struct dentry *debugfs_dir;
+ struct nd_btt *nd_btt;
+ u64 nlba;
+ long long unsigned int 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;
+};
+
+struct iosys_map {
+ union {
+ void *vaddr_iomem;
+ void *vaddr;
+ };
+ bool is_iomem;
+};
+
+struct sg_table {
+ struct scatterlist *sgl;
+ unsigned int nents;
+ unsigned int orig_nents;
+};
+
+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;
+ long unsigned int 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 int (*wait)(struct dma_fence *, bool, long int);
+ 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 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 dma_buf;
+
+struct dma_buf_attachment;
+
+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 (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
+ 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 *);
+};
+
+struct dma_buf_poll_cb_t {
+ struct dma_fence_cb cb;
+ wait_queue_head_t *poll;
+ __poll_t active;
+};
+
+struct dma_resv;
+
+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_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;
+};
+
+struct dma_resv_list;
+
+struct dma_resv {
+ struct ww_mutex lock;
+ struct dma_resv_list *fences;
+};
+
+struct dma_buf_attach_ops {
+ bool allow_peer2peer;
+ void (*move_notify)(struct dma_buf_attachment *);
+};
+
+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;
+};
+
+struct dma_fence_unwrap {
+ struct dma_fence *chain;
+ struct dma_fence *array;
+ unsigned int index;
+};
+
+struct sync_file {
+ struct file *file;
+ char user_name[32];
+ struct list_head sync_file_list;
+ wait_queue_head_t wq;
+ long unsigned int flags;
+ struct dma_fence *fence;
+ struct dma_fence_cb cb;
+};
+
+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 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 dma_buf_sync {
+ __u64 flags;
+};
+
+struct dma_buf_export_sync_file {
+ __u32 flags;
+ __s32 fd;
+};
+
+struct dma_buf_import_sync_file {
+ __u32 flags;
+ __s32 fd;
+};
+
+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 scsi_sense_hdr {
+ u8 response_code;
+ u8 sense_key;
+ u8 asc;
+ u8 ascq;
+ u8 byte4;
+ u8 byte5;
+ u8 byte6;
+ u8 additional_length;
+};
+
+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,
+};
+
+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,
+};
+
+typedef __u64 blist_flags_t;
+
+struct scsi_mode_data {
+ __u32 length;
+ __u16 block_descriptor_length;
+ __u8 medium_type;
+ __u8 device_specific;
+ __u8 header_length;
+ __u8 longlba: 1;
+};
+
+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,
+};
+
+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,
+};
+
+struct scsi_event {
+ enum scsi_device_event evt_type;
+ struct list_head node;
+};
+
+struct scsi_vpd {
+ struct callback_head rcu;
+ int len;
+ unsigned char data[0];
+};
+
+struct Scsi_Host;
+
+struct scsi_target;
+
+struct scsi_device_handler;
+
+struct bsg_device;
+
+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;
+ short unsigned int queue_depth;
+ short unsigned int max_queue_depth;
+ short unsigned int last_queue_full_depth;
+ short unsigned int last_queue_full_count;
+ long unsigned int last_queue_full_time;
+ long unsigned int queue_ramp_up_period;
+ long unsigned int 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 *vpd_pg0;
+ struct scsi_vpd *vpd_pg83;
+ struct scsi_vpd *vpd_pg80;
+ struct scsi_vpd *vpd_pg89;
+ struct scsi_vpd *vpd_pgb0;
+ struct scsi_vpd *vpd_pgb1;
+ struct scsi_vpd *vpd_pgb2;
+ struct scsi_vpd *vpd_pgb7;
+ 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 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;
+ long unsigned int supported_events[1];
+ long unsigned int 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;
+ long unsigned int 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;
+ long unsigned int last_reset;
+ unsigned int max_channel;
+ unsigned int max_id;
+ u64 max_lun;
+ unsigned int unique_id;
+ short unsigned int max_cmd_len;
+ int this_id;
+ int can_queue;
+ short int cmd_per_lun;
+ short unsigned int sg_tablesize;
+ short unsigned int sg_prot_tablesize;
+ unsigned int max_sectors;
+ unsigned int opt_sectors;
+ unsigned int max_segment_size;
+ unsigned int dma_alignment;
+ long unsigned int dma_boundary;
+ long unsigned int 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;
+ unsigned int no_highmem: 1;
+ 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;
+ long unsigned int base;
+ long unsigned int 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;
+ long unsigned int hostdata[0];
+};
+
+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;
+ long unsigned int starget_data[0];
+};
+
+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_failure {
+ int result;
+ u8 sense;
+ u8 asc;
+ u8 ascq;
+ s8 allowed;
+ s8 retries;
+};
+
+struct scsi_failures {
+ int total_allowed;
+ int total_retries;
+ struct scsi_failure *failure_definitions;
+};
+
+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_failures *failures;
+};
+
+struct scsi_data_buffer {
+ struct sg_table table;
+ unsigned int length;
+};
+
+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_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;
+ long unsigned int jiffies_at_alloc;
+ int retries;
+ int allowed;
+ unsigned char prot_op;
+ unsigned char prot_type;
+ unsigned char prot_flags;
+ enum scsi_cmnd_submitter submitter;
+ short unsigned int 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;
+ long unsigned int state;
+ unsigned int extra_len;
+ unsigned char *host_scribble;
+ int result;
+};
+
+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,
+};
+
+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 *);
+};
+
+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 *);
+ int (*compat_ioctl)(struct scsi_device *, unsigned int, void *);
+ 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 (*device_configure)(struct scsi_device *, struct queue_limits *);
+ 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 *, long unsigned int);
+ 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;
+ short unsigned int sg_tablesize;
+ short unsigned int sg_prot_tablesize;
+ unsigned int max_sectors;
+ unsigned int max_segment_size;
+ unsigned int dma_alignment;
+ long unsigned int dma_boundary;
+ long unsigned int virt_boundary_mask;
+ short int 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;
+};
+
+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 *);
+};
+
+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,
+};
+
+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 {
+ ACTION_FAIL = 0,
+ ACTION_REPREP = 1,
+ ACTION_DELAYED_REPREP = 2,
+ ACTION_RETRY = 3,
+ ACTION_DELAYED_RETRY = 4,
+};
+
+enum {
+ DUMP_PREFIX_NONE = 0,
+ DUMP_PREFIX_ADDRESS = 1,
+ DUMP_PREFIX_OFFSET = 2,
+};
+
+struct module_version_attribute {
+ struct module_attribute mattr;
+ const char *module_name;
+ const char *version;
+};
+
+struct cdrom_device_ops;
+
+struct cdrom_device_info {
+ const struct cdrom_device_ops *ops;
+ struct list_head list;
+ struct gendisk *disk;
+ void *handle;
+ int mask;
+ int speed;
+ int capacity;
+ unsigned int options: 30;
+ unsigned int mc_flags: 2;
+ unsigned int vfs_events;
+ unsigned int ioctl_events;
+ int use_count;
+ char name[20];
+ __u8 sanyo_slot: 2;
+ __u8 keeplocked: 1;
+ __u8 reserved: 5;
+ int cdda_method;
+ __u8 last_sense;
+ __u8 media_written;
+ short unsigned int mmc3_profile;
+ int (*exit)(struct cdrom_device_info *);
+ int mrw_mode_page;
+ bool opened_for_data;
+ __s64 last_media_change_ms;
+};
+
+enum {
+ ATA_MAX_DEVICES = 2,
+ ATA_MAX_PRD = 256,
+ ATA_SECT_SIZE = 512,
+ ATA_MAX_SECTORS_128 = 128,
+ ATA_MAX_SECTORS = 256,
+ ATA_MAX_SECTORS_1024 = 1024,
+ ATA_MAX_SECTORS_LBA48 = 65535,
+ ATA_MAX_SECTORS_TAPE = 65535,
+ ATA_MAX_TRIM_RNUM = 64,
+ ATA_ID_WORDS = 256,
+ ATA_ID_CONFIG = 0,
+ ATA_ID_CYLS = 1,
+ ATA_ID_HEADS = 3,
+ ATA_ID_SECTORS = 6,
+ ATA_ID_SERNO = 10,
+ ATA_ID_BUF_SIZE = 21,
+ ATA_ID_FW_REV = 23,
+ ATA_ID_PROD = 27,
+ ATA_ID_MAX_MULTSECT = 47,
+ ATA_ID_DWORD_IO = 48,
+ ATA_ID_TRUSTED = 48,
+ ATA_ID_CAPABILITY = 49,
+ ATA_ID_OLD_PIO_MODES = 51,
+ ATA_ID_OLD_DMA_MODES = 52,
+ ATA_ID_FIELD_VALID = 53,
+ ATA_ID_CUR_CYLS = 54,
+ ATA_ID_CUR_HEADS = 55,
+ ATA_ID_CUR_SECTORS = 56,
+ ATA_ID_MULTSECT = 59,
+ ATA_ID_LBA_CAPACITY = 60,
+ ATA_ID_SWDMA_MODES = 62,
+ ATA_ID_MWDMA_MODES = 63,
+ ATA_ID_PIO_MODES = 64,
+ ATA_ID_EIDE_DMA_MIN = 65,
+ ATA_ID_EIDE_DMA_TIME = 66,
+ ATA_ID_EIDE_PIO = 67,
+ ATA_ID_EIDE_PIO_IORDY = 68,
+ ATA_ID_ADDITIONAL_SUPP = 69,
+ ATA_ID_QUEUE_DEPTH = 75,
+ ATA_ID_SATA_CAPABILITY = 76,
+ ATA_ID_SATA_CAPABILITY_2 = 77,
+ ATA_ID_FEATURE_SUPP = 78,
+ ATA_ID_MAJOR_VER = 80,
+ ATA_ID_COMMAND_SET_1 = 82,
+ ATA_ID_COMMAND_SET_2 = 83,
+ ATA_ID_CFSSE = 84,
+ ATA_ID_CFS_ENABLE_1 = 85,
+ ATA_ID_CFS_ENABLE_2 = 86,
+ ATA_ID_CSF_DEFAULT = 87,
+ ATA_ID_UDMA_MODES = 88,
+ ATA_ID_HW_CONFIG = 93,
+ ATA_ID_SPG = 98,
+ ATA_ID_LBA_CAPACITY_2 = 100,
+ ATA_ID_SECTOR_SIZE = 106,
+ ATA_ID_WWN = 108,
+ ATA_ID_LOGICAL_SECTOR_SIZE = 117,
+ ATA_ID_COMMAND_SET_3 = 119,
+ ATA_ID_COMMAND_SET_4 = 120,
+ ATA_ID_LAST_LUN = 126,
+ ATA_ID_DLF = 128,
+ ATA_ID_CSFO = 129,
+ ATA_ID_CFA_POWER = 160,
+ ATA_ID_CFA_KEY_MGMT = 162,
+ ATA_ID_CFA_MODES = 163,
+ ATA_ID_DATA_SET_MGMT = 169,
+ ATA_ID_SCT_CMD_XPORT = 206,
+ ATA_ID_ROT_SPEED = 217,
+ ATA_ID_PIO4 = 2,
+ ATA_ID_SERNO_LEN = 20,
+ ATA_ID_FW_REV_LEN = 8,
+ ATA_ID_PROD_LEN = 40,
+ ATA_ID_WWN_LEN = 8,
+ ATA_PCI_CTL_OFS = 2,
+ ATA_PIO0 = 1,
+ ATA_PIO1 = 3,
+ ATA_PIO2 = 7,
+ ATA_PIO3 = 15,
+ ATA_PIO4 = 31,
+ ATA_PIO5 = 63,
+ ATA_PIO6 = 127,
+ ATA_PIO4_ONLY = 16,
+ ATA_SWDMA0 = 1,
+ ATA_SWDMA1 = 3,
+ ATA_SWDMA2 = 7,
+ ATA_SWDMA2_ONLY = 4,
+ ATA_MWDMA0 = 1,
+ ATA_MWDMA1 = 3,
+ ATA_MWDMA2 = 7,
+ ATA_MWDMA3 = 15,
+ ATA_MWDMA4 = 31,
+ ATA_MWDMA12_ONLY = 6,
+ ATA_MWDMA2_ONLY = 4,
+ ATA_UDMA0 = 1,
+ ATA_UDMA1 = 3,
+ ATA_UDMA2 = 7,
+ ATA_UDMA3 = 15,
+ ATA_UDMA4 = 31,
+ ATA_UDMA5 = 63,
+ ATA_UDMA6 = 127,
+ ATA_UDMA7 = 255,
+ ATA_UDMA24_ONLY = 20,
+ ATA_UDMA_MASK_40C = 7,
+ ATA_PRD_SZ = 8,
+ ATA_PRD_TBL_SZ = 2048,
+ ATA_PRD_EOT = -2147483648,
+ ATA_DMA_TABLE_OFS = 4,
+ ATA_DMA_STATUS = 2,
+ ATA_DMA_CMD = 0,
+ ATA_DMA_WR = 8,
+ ATA_DMA_START = 1,
+ ATA_DMA_INTR = 4,
+ ATA_DMA_ERR = 2,
+ ATA_DMA_ACTIVE = 1,
+ ATA_HOB = 128,
+ ATA_NIEN = 2,
+ ATA_LBA = 64,
+ ATA_DEV1 = 16,
+ ATA_DEVICE_OBS = 160,
+ ATA_DEVCTL_OBS = 8,
+ ATA_BUSY = 128,
+ ATA_DRDY = 64,
+ ATA_DF = 32,
+ ATA_DSC = 16,
+ ATA_DRQ = 8,
+ ATA_CORR = 4,
+ ATA_SENSE = 2,
+ ATA_ERR = 1,
+ ATA_SRST = 4,
+ ATA_ICRC = 128,
+ ATA_BBK = 128,
+ ATA_UNC = 64,
+ ATA_MC = 32,
+ ATA_IDNF = 16,
+ ATA_MCR = 8,
+ ATA_ABORTED = 4,
+ ATA_TRK0NF = 2,
+ ATA_AMNF = 1,
+ ATAPI_LFS = 240,
+ ATAPI_EOM = 2,
+ ATAPI_ILI = 1,
+ ATAPI_IO = 2,
+ ATAPI_COD = 1,
+ ATA_REG_DATA = 0,
+ ATA_REG_ERR = 1,
+ ATA_REG_NSECT = 2,
+ ATA_REG_LBAL = 3,
+ ATA_REG_LBAM = 4,
+ ATA_REG_LBAH = 5,
+ ATA_REG_DEVICE = 6,
+ ATA_REG_STATUS = 7,
+ ATA_REG_FEATURE = 1,
+ ATA_REG_CMD = 7,
+ ATA_REG_BYTEL = 4,
+ ATA_REG_BYTEH = 5,
+ ATA_REG_DEVSEL = 6,
+ ATA_REG_IRQ = 2,
+ ATA_CMD_DEV_RESET = 8,
+ ATA_CMD_CHK_POWER = 229,
+ ATA_CMD_STANDBY = 226,
+ ATA_CMD_IDLE = 227,
+ ATA_CMD_EDD = 144,
+ ATA_CMD_DOWNLOAD_MICRO = 146,
+ ATA_CMD_DOWNLOAD_MICRO_DMA = 147,
+ ATA_CMD_NOP = 0,
+ ATA_CMD_FLUSH = 231,
+ ATA_CMD_FLUSH_EXT = 234,
+ ATA_CMD_ID_ATA = 236,
+ ATA_CMD_ID_ATAPI = 161,
+ ATA_CMD_SERVICE = 162,
+ ATA_CMD_READ = 200,
+ ATA_CMD_READ_EXT = 37,
+ ATA_CMD_READ_QUEUED = 38,
+ ATA_CMD_READ_STREAM_EXT = 43,
+ ATA_CMD_READ_STREAM_DMA_EXT = 42,
+ ATA_CMD_WRITE = 202,
+ ATA_CMD_WRITE_EXT = 53,
+ ATA_CMD_WRITE_QUEUED = 54,
+ ATA_CMD_WRITE_STREAM_EXT = 59,
+ ATA_CMD_WRITE_STREAM_DMA_EXT = 58,
+ ATA_CMD_WRITE_FUA_EXT = 61,
+ ATA_CMD_WRITE_QUEUED_FUA_EXT = 62,
+ ATA_CMD_FPDMA_READ = 96,
+ ATA_CMD_FPDMA_WRITE = 97,
+ ATA_CMD_NCQ_NON_DATA = 99,
+ ATA_CMD_FPDMA_SEND = 100,
+ ATA_CMD_FPDMA_RECV = 101,
+ ATA_CMD_PIO_READ = 32,
+ ATA_CMD_PIO_READ_EXT = 36,
+ ATA_CMD_PIO_WRITE = 48,
+ ATA_CMD_PIO_WRITE_EXT = 52,
+ ATA_CMD_READ_MULTI = 196,
+ ATA_CMD_READ_MULTI_EXT = 41,
+ ATA_CMD_WRITE_MULTI = 197,
+ ATA_CMD_WRITE_MULTI_EXT = 57,
+ ATA_CMD_WRITE_MULTI_FUA_EXT = 206,
+ ATA_CMD_SET_FEATURES = 239,
+ ATA_CMD_SET_MULTI = 198,
+ ATA_CMD_PACKET = 160,
+ ATA_CMD_VERIFY = 64,
+ ATA_CMD_VERIFY_EXT = 66,
+ ATA_CMD_WRITE_UNCORR_EXT = 69,
+ ATA_CMD_STANDBYNOW1 = 224,
+ ATA_CMD_IDLEIMMEDIATE = 225,
+ ATA_CMD_SLEEP = 230,
+ ATA_CMD_INIT_DEV_PARAMS = 145,
+ ATA_CMD_READ_NATIVE_MAX = 248,
+ ATA_CMD_READ_NATIVE_MAX_EXT = 39,
+ ATA_CMD_SET_MAX = 249,
+ ATA_CMD_SET_MAX_EXT = 55,
+ ATA_CMD_READ_LOG_EXT = 47,
+ ATA_CMD_WRITE_LOG_EXT = 63,
+ ATA_CMD_READ_LOG_DMA_EXT = 71,
+ ATA_CMD_WRITE_LOG_DMA_EXT = 87,
+ ATA_CMD_TRUSTED_NONDATA = 91,
+ ATA_CMD_TRUSTED_RCV = 92,
+ ATA_CMD_TRUSTED_RCV_DMA = 93,
+ ATA_CMD_TRUSTED_SND = 94,
+ ATA_CMD_TRUSTED_SND_DMA = 95,
+ ATA_CMD_PMP_READ = 228,
+ ATA_CMD_PMP_READ_DMA = 233,
+ ATA_CMD_PMP_WRITE = 232,
+ ATA_CMD_PMP_WRITE_DMA = 235,
+ ATA_CMD_CONF_OVERLAY = 177,
+ ATA_CMD_SEC_SET_PASS = 241,
+ ATA_CMD_SEC_UNLOCK = 242,
+ ATA_CMD_SEC_ERASE_PREP = 243,
+ ATA_CMD_SEC_ERASE_UNIT = 244,
+ ATA_CMD_SEC_FREEZE_LOCK = 245,
+ ATA_CMD_SEC_DISABLE_PASS = 246,
+ ATA_CMD_CONFIG_STREAM = 81,
+ ATA_CMD_SMART = 176,
+ ATA_CMD_MEDIA_LOCK = 222,
+ ATA_CMD_MEDIA_UNLOCK = 223,
+ ATA_CMD_DSM = 6,
+ ATA_CMD_CHK_MED_CRD_TYP = 209,
+ ATA_CMD_CFA_REQ_EXT_ERR = 3,
+ ATA_CMD_CFA_WRITE_NE = 56,
+ ATA_CMD_CFA_TRANS_SECT = 135,
+ ATA_CMD_CFA_ERASE = 192,
+ ATA_CMD_CFA_WRITE_MULT_NE = 205,
+ ATA_CMD_REQ_SENSE_DATA = 11,
+ ATA_CMD_SANITIZE_DEVICE = 180,
+ ATA_CMD_ZAC_MGMT_IN = 74,
+ ATA_CMD_ZAC_MGMT_OUT = 159,
+ ATA_CMD_RESTORE = 16,
+ ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT = 1,
+ ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN = 2,
+ ATA_SUBCMD_FPDMA_SEND_DSM = 0,
+ ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 2,
+ ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0,
+ ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 5,
+ ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 6,
+ ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT = 7,
+ ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES = 0,
+ ATA_SUBCMD_ZAC_MGMT_OUT_CLOSE_ZONE = 1,
+ ATA_SUBCMD_ZAC_MGMT_OUT_FINISH_ZONE = 2,
+ ATA_SUBCMD_ZAC_MGMT_OUT_OPEN_ZONE = 3,
+ ATA_SUBCMD_ZAC_MGMT_OUT_RESET_WRITE_POINTER = 4,
+ ATA_LOG_DIRECTORY = 0,
+ ATA_LOG_SATA_NCQ = 16,
+ ATA_LOG_NCQ_NON_DATA = 18,
+ ATA_LOG_NCQ_SEND_RECV = 19,
+ ATA_LOG_CDL = 24,
+ ATA_LOG_CDL_SIZE = 512,
+ ATA_LOG_IDENTIFY_DEVICE = 48,
+ ATA_LOG_SENSE_NCQ = 15,
+ ATA_LOG_SENSE_NCQ_SIZE = 1024,
+ ATA_LOG_CONCURRENT_POSITIONING_RANGES = 71,
+ ATA_LOG_SUPPORTED_CAPABILITIES = 3,
+ ATA_LOG_CURRENT_SETTINGS = 4,
+ ATA_LOG_SECURITY = 6,
+ ATA_LOG_SATA_SETTINGS = 8,
+ ATA_LOG_ZONED_INFORMATION = 9,
+ ATA_LOG_DEVSLP_OFFSET = 48,
+ ATA_LOG_DEVSLP_SIZE = 8,
+ ATA_LOG_DEVSLP_MDAT = 0,
+ ATA_LOG_DEVSLP_MDAT_MASK = 31,
+ ATA_LOG_DEVSLP_DETO = 1,
+ ATA_LOG_DEVSLP_VALID = 7,
+ ATA_LOG_DEVSLP_VALID_MASK = 128,
+ ATA_LOG_NCQ_PRIO_OFFSET = 9,
+ ATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0,
+ ATA_LOG_NCQ_SEND_RECV_SUBCMDS_DSM = 1,
+ ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET = 4,
+ ATA_LOG_NCQ_SEND_RECV_DSM_TRIM = 1,
+ ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET = 8,
+ ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED = 1,
+ ATA_LOG_NCQ_SEND_RECV_WR_LOG_OFFSET = 12,
+ ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = 1,
+ ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET = 16,
+ ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OUT_SUPPORTED = 1,
+ ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED = 2,
+ ATA_LOG_NCQ_SEND_RECV_SIZE = 20,
+ ATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0,
+ ATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0,
+ ATA_LOG_NCQ_NON_DATA_ABORT_NCQ = 1,
+ ATA_LOG_NCQ_NON_DATA_ABORT_ALL = 2,
+ ATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = 4,
+ ATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = 8,
+ ATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = 16,
+ ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 28,
+ ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = 1,
+ ATA_LOG_NCQ_NON_DATA_SIZE = 64,
+ ATA_CMD_READ_LONG = 34,
+ ATA_CMD_READ_LONG_ONCE = 35,
+ ATA_CMD_WRITE_LONG = 50,
+ ATA_CMD_WRITE_LONG_ONCE = 51,
+ SETFEATURES_XFER = 3,
+ XFER_UDMA_7 = 71,
+ XFER_UDMA_6 = 70,
+ XFER_UDMA_5 = 69,
+ XFER_UDMA_4 = 68,
+ XFER_UDMA_3 = 67,
+ XFER_UDMA_2 = 66,
+ XFER_UDMA_1 = 65,
+ XFER_UDMA_0 = 64,
+ XFER_MW_DMA_4 = 36,
+ XFER_MW_DMA_3 = 35,
+ XFER_MW_DMA_2 = 34,
+ XFER_MW_DMA_1 = 33,
+ XFER_MW_DMA_0 = 32,
+ XFER_SW_DMA_2 = 18,
+ XFER_SW_DMA_1 = 17,
+ XFER_SW_DMA_0 = 16,
+ XFER_PIO_6 = 14,
+ XFER_PIO_5 = 13,
+ XFER_PIO_4 = 12,
+ XFER_PIO_3 = 11,
+ XFER_PIO_2 = 10,
+ XFER_PIO_1 = 9,
+ XFER_PIO_0 = 8,
+ XFER_PIO_SLOW = 0,
+ SETFEATURES_WC_ON = 2,
+ SETFEATURES_WC_OFF = 130,
+ SETFEATURES_RA_ON = 170,
+ SETFEATURES_RA_OFF = 85,
+ SETFEATURES_AAM_ON = 66,
+ SETFEATURES_AAM_OFF = 194,
+ SETFEATURES_SPINUP = 7,
+ SETFEATURES_SPINUP_TIMEOUT = 30000,
+ SETFEATURES_SATA_ENABLE = 16,
+ SETFEATURES_SATA_DISABLE = 144,
+ SETFEATURES_CDL = 13,
+ SATA_FPDMA_OFFSET = 1,
+ SATA_FPDMA_AA = 2,
+ SATA_DIPM = 3,
+ SATA_FPDMA_IN_ORDER = 4,
+ SATA_AN = 5,
+ SATA_SSP = 6,
+ SATA_DEVSLP = 9,
+ SETFEATURE_SENSE_DATA = 195,
+ SETFEATURE_SENSE_DATA_SUCC_NCQ = 196,
+ ATA_SET_MAX_ADDR = 0,
+ ATA_SET_MAX_PASSWD = 1,
+ ATA_SET_MAX_LOCK = 2,
+ ATA_SET_MAX_UNLOCK = 3,
+ ATA_SET_MAX_FREEZE_LOCK = 4,
+ ATA_SET_MAX_PASSWD_DMA = 5,
+ ATA_SET_MAX_UNLOCK_DMA = 6,
+ ATA_DCO_RESTORE = 192,
+ ATA_DCO_FREEZE_LOCK = 193,
+ ATA_DCO_IDENTIFY = 194,
+ ATA_DCO_SET = 195,
+ ATA_SMART_ENABLE = 216,
+ ATA_SMART_READ_VALUES = 208,
+ ATA_SMART_READ_THRESHOLDS = 209,
+ ATA_DSM_TRIM = 1,
+ ATA_SMART_LBAM_PASS = 79,
+ ATA_SMART_LBAH_PASS = 194,
+ ATAPI_PKT_DMA = 1,
+ ATAPI_DMADIR = 4,
+ ATAPI_CDB_LEN = 16,
+ SATA_PMP_MAX_PORTS = 15,
+ SATA_PMP_CTRL_PORT = 15,
+ SATA_PMP_GSCR_DWORDS = 128,
+ SATA_PMP_GSCR_PROD_ID = 0,
+ SATA_PMP_GSCR_REV = 1,
+ SATA_PMP_GSCR_PORT_INFO = 2,
+ SATA_PMP_GSCR_ERROR = 32,
+ SATA_PMP_GSCR_ERROR_EN = 33,
+ SATA_PMP_GSCR_FEAT = 64,
+ SATA_PMP_GSCR_FEAT_EN = 96,
+ SATA_PMP_PSCR_STATUS = 0,
+ SATA_PMP_PSCR_ERROR = 1,
+ SATA_PMP_PSCR_CONTROL = 2,
+ SATA_PMP_FEAT_BIST = 1,
+ SATA_PMP_FEAT_PMREQ = 2,
+ SATA_PMP_FEAT_DYNSSC = 4,
+ SATA_PMP_FEAT_NOTIFY = 8,
+ ATA_CBL_NONE = 0,
+ ATA_CBL_PATA40 = 1,
+ ATA_CBL_PATA80 = 2,
+ ATA_CBL_PATA40_SHORT = 3,
+ ATA_CBL_PATA_UNK = 4,
+ ATA_CBL_PATA_IGN = 5,
+ ATA_CBL_SATA = 6,
+ SCR_STATUS = 0,
+ SCR_ERROR = 1,
+ SCR_CONTROL = 2,
+ SCR_ACTIVE = 3,
+ SCR_NOTIFICATION = 4,
+ SERR_DATA_RECOVERED = 1,
+ SERR_COMM_RECOVERED = 2,
+ SERR_DATA = 256,
+ SERR_PERSISTENT = 512,
+ SERR_PROTOCOL = 1024,
+ SERR_INTERNAL = 2048,
+ SERR_PHYRDY_CHG = 65536,
+ SERR_PHY_INT_ERR = 131072,
+ SERR_COMM_WAKE = 262144,
+ SERR_10B_8B_ERR = 524288,
+ SERR_DISPARITY = 1048576,
+ SERR_CRC = 2097152,
+ SERR_HANDSHAKE = 4194304,
+ SERR_LINK_SEQ_ERR = 8388608,
+ SERR_TRANS_ST_ERROR = 16777216,
+ SERR_UNRECOG_FIS = 33554432,
+ SERR_DEV_XCHG = 67108864,
+};
+
+enum ata_prot_flags {
+ ATA_PROT_FLAG_PIO = 1,
+ ATA_PROT_FLAG_DMA = 2,
+ ATA_PROT_FLAG_NCQ = 4,
+ ATA_PROT_FLAG_ATAPI = 8,
+ ATA_PROT_UNKNOWN = 255,
+ ATA_PROT_NODATA = 0,
+ ATA_PROT_PIO = 1,
+ ATA_PROT_DMA = 2,
+ ATA_PROT_NCQ_NODATA = 4,
+ ATA_PROT_NCQ = 6,
+ ATAPI_PROT_NODATA = 8,
+ ATAPI_PROT_PIO = 9,
+ ATAPI_PROT_DMA = 10,
+};
+
+struct ata_bmdma_prd {
+ __le32 addr;
+ __le32 flags_len;
+};
+
+struct cdrom_msf0 {
+ __u8 minute;
+ __u8 second;
+ __u8 frame;
+};
+
+union cdrom_addr {
+ struct cdrom_msf0 msf;
+ int lba;
+};
+
+struct cdrom_multisession {
+ union cdrom_addr addr;
+ __u8 xa_flag;
+ __u8 addr_format;
+};
+
+struct cdrom_mcn {
+ __u8 medium_catalog_number[14];
+};
+
+struct packet_command {
+ unsigned char cmd[12];
+ unsigned char *buffer;
+ unsigned int buflen;
+ int stat;
+ struct scsi_sense_hdr *sshdr;
+ unsigned char data_direction;
+ int quiet;
+ int timeout;
+ void *reserved[1];
+};
+
+struct cdrom_device_ops {
+ int (*open)(struct cdrom_device_info *, int);
+ void (*release)(struct cdrom_device_info *);
+ int (*drive_status)(struct cdrom_device_info *, int);
+ unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
+ int (*tray_move)(struct cdrom_device_info *, int);
+ int (*lock_door)(struct cdrom_device_info *, int);
+ int (*select_speed)(struct cdrom_device_info *, long unsigned int);
+ int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
+ int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
+ int (*reset)(struct cdrom_device_info *);
+ int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
+ int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
+ int (*read_cdda_bpc)(struct cdrom_device_info *, void *, u32, u32, u8 *);
+ const int capability;
+};
+
+typedef u64 async_cookie_t;
+
+typedef void (*async_func_t)(void *, async_cookie_t);
+
+enum ata_quirks {
+ __ATA_QUIRK_DIAGNOSTIC = 0,
+ __ATA_QUIRK_NODMA = 1,
+ __ATA_QUIRK_NONCQ = 2,
+ __ATA_QUIRK_MAX_SEC_128 = 3,
+ __ATA_QUIRK_BROKEN_HPA = 4,
+ __ATA_QUIRK_DISABLE = 5,
+ __ATA_QUIRK_HPA_SIZE = 6,
+ __ATA_QUIRK_IVB = 7,
+ __ATA_QUIRK_STUCK_ERR = 8,
+ __ATA_QUIRK_BRIDGE_OK = 9,
+ __ATA_QUIRK_ATAPI_MOD16_DMA = 10,
+ __ATA_QUIRK_FIRMWARE_WARN = 11,
+ __ATA_QUIRK_1_5_GBPS = 12,
+ __ATA_QUIRK_NOSETXFER = 13,
+ __ATA_QUIRK_BROKEN_FPDMA_AA = 14,
+ __ATA_QUIRK_DUMP_ID = 15,
+ __ATA_QUIRK_MAX_SEC_LBA48 = 16,
+ __ATA_QUIRK_ATAPI_DMADIR = 17,
+ __ATA_QUIRK_NO_NCQ_TRIM = 18,
+ __ATA_QUIRK_NOLPM = 19,
+ __ATA_QUIRK_WD_BROKEN_LPM = 20,
+ __ATA_QUIRK_ZERO_AFTER_TRIM = 21,
+ __ATA_QUIRK_NO_DMA_LOG = 22,
+ __ATA_QUIRK_NOTRIM = 23,
+ __ATA_QUIRK_MAX_SEC_1024 = 24,
+ __ATA_QUIRK_MAX_TRIM_128M = 25,
+ __ATA_QUIRK_NO_NCQ_ON_ATI = 26,
+ __ATA_QUIRK_NO_ID_DEV_LOG = 27,
+ __ATA_QUIRK_NO_LOG_DIR = 28,
+ __ATA_QUIRK_NO_FUA = 29,
+ __ATA_QUIRK_MAX = 30,
+};
+
+enum {
+ LIBATA_MAX_PRD = 128,
+ LIBATA_DUMB_MAX_PRD = 64,
+ ATA_DEF_QUEUE = 1,
+ ATA_MAX_QUEUE = 32,
+ ATA_TAG_INTERNAL = 32,
+ ATA_SHORT_PAUSE = 16,
+ ATAPI_MAX_DRAIN = 16384,
+ ATA_ALL_DEVICES = 3,
+ ATA_SHT_EMULATED = 1,
+ ATA_SHT_THIS_ID = -1,
+ ATA_TFLAG_LBA48 = 1,
+ ATA_TFLAG_ISADDR = 2,
+ ATA_TFLAG_DEVICE = 4,
+ ATA_TFLAG_WRITE = 8,
+ ATA_TFLAG_LBA = 16,
+ ATA_TFLAG_FUA = 32,
+ ATA_TFLAG_POLLING = 64,
+ ATA_DFLAG_LBA = 1,
+ ATA_DFLAG_LBA48 = 2,
+ ATA_DFLAG_CDB_INTR = 4,
+ ATA_DFLAG_NCQ = 8,
+ ATA_DFLAG_FLUSH_EXT = 16,
+ ATA_DFLAG_ACPI_PENDING = 32,
+ ATA_DFLAG_ACPI_FAILED = 64,
+ ATA_DFLAG_AN = 128,
+ ATA_DFLAG_TRUSTED = 256,
+ ATA_DFLAG_FUA = 512,
+ ATA_DFLAG_DMADIR = 1024,
+ ATA_DFLAG_NCQ_SEND_RECV = 2048,
+ ATA_DFLAG_NCQ_PRIO = 4096,
+ ATA_DFLAG_CDL = 8192,
+ ATA_DFLAG_CFG_MASK = 16383,
+ ATA_DFLAG_PIO = 16384,
+ ATA_DFLAG_NCQ_OFF = 32768,
+ ATA_DFLAG_SLEEPING = 65536,
+ ATA_DFLAG_DUBIOUS_XFER = 131072,
+ ATA_DFLAG_NO_UNLOAD = 262144,
+ ATA_DFLAG_UNLOCK_HPA = 524288,
+ ATA_DFLAG_INIT_MASK = 1048575,
+ ATA_DFLAG_NCQ_PRIO_ENABLED = 1048576,
+ ATA_DFLAG_CDL_ENABLED = 2097152,
+ ATA_DFLAG_RESUMING = 4194304,
+ ATA_DFLAG_DETACH = 16777216,
+ ATA_DFLAG_DETACHED = 33554432,
+ ATA_DFLAG_DA = 67108864,
+ ATA_DFLAG_DEVSLP = 134217728,
+ ATA_DFLAG_ACPI_DISABLED = 268435456,
+ ATA_DFLAG_D_SENSE = 536870912,
+ ATA_DFLAG_ZAC = 1073741824,
+ ATA_DFLAG_FEATURES_MASK = 201341696,
+ ATA_DEV_UNKNOWN = 0,
+ ATA_DEV_ATA = 1,
+ ATA_DEV_ATA_UNSUP = 2,
+ ATA_DEV_ATAPI = 3,
+ ATA_DEV_ATAPI_UNSUP = 4,
+ ATA_DEV_PMP = 5,
+ ATA_DEV_PMP_UNSUP = 6,
+ ATA_DEV_SEMB = 7,
+ ATA_DEV_SEMB_UNSUP = 8,
+ ATA_DEV_ZAC = 9,
+ ATA_DEV_ZAC_UNSUP = 10,
+ ATA_DEV_NONE = 11,
+ ATA_LFLAG_NO_HRST = 2,
+ ATA_LFLAG_NO_SRST = 4,
+ ATA_LFLAG_ASSUME_ATA = 8,
+ ATA_LFLAG_ASSUME_SEMB = 16,
+ ATA_LFLAG_ASSUME_CLASS = 24,
+ ATA_LFLAG_NO_RETRY = 32,
+ ATA_LFLAG_DISABLED = 64,
+ ATA_LFLAG_SW_ACTIVITY = 128,
+ ATA_LFLAG_NO_LPM = 256,
+ ATA_LFLAG_RST_ONCE = 512,
+ ATA_LFLAG_CHANGED = 1024,
+ ATA_LFLAG_NO_DEBOUNCE_DELAY = 2048,
+ ATA_FLAG_SLAVE_POSS = 1,
+ ATA_FLAG_SATA = 2,
+ ATA_FLAG_NO_LPM = 4,
+ ATA_FLAG_NO_LOG_PAGE = 32,
+ ATA_FLAG_NO_ATAPI = 64,
+ ATA_FLAG_PIO_DMA = 128,
+ ATA_FLAG_PIO_LBA48 = 256,
+ ATA_FLAG_PIO_POLLING = 512,
+ ATA_FLAG_NCQ = 1024,
+ ATA_FLAG_NO_POWEROFF_SPINDOWN = 2048,
+ ATA_FLAG_NO_HIBERNATE_SPINDOWN = 4096,
+ ATA_FLAG_DEBUGMSG = 8192,
+ ATA_FLAG_FPDMA_AA = 16384,
+ ATA_FLAG_IGN_SIMPLEX = 32768,
+ ATA_FLAG_NO_IORDY = 65536,
+ ATA_FLAG_ACPI_SATA = 131072,
+ ATA_FLAG_AN = 262144,
+ ATA_FLAG_PMP = 524288,
+ ATA_FLAG_FPDMA_AUX = 1048576,
+ ATA_FLAG_EM = 2097152,
+ ATA_FLAG_SW_ACTIVITY = 4194304,
+ ATA_FLAG_NO_DIPM = 8388608,
+ ATA_FLAG_SAS_HOST = 16777216,
+ ATA_PFLAG_EH_PENDING = 1,
+ ATA_PFLAG_EH_IN_PROGRESS = 2,
+ ATA_PFLAG_FROZEN = 4,
+ ATA_PFLAG_RECOVERED = 8,
+ ATA_PFLAG_LOADING = 16,
+ ATA_PFLAG_SCSI_HOTPLUG = 64,
+ ATA_PFLAG_INITIALIZING = 128,
+ ATA_PFLAG_RESETTING = 256,
+ ATA_PFLAG_UNLOADING = 512,
+ ATA_PFLAG_UNLOADED = 1024,
+ ATA_PFLAG_RESUMING = 65536,
+ ATA_PFLAG_SUSPENDED = 131072,
+ ATA_PFLAG_PM_PENDING = 262144,
+ ATA_PFLAG_INIT_GTM_VALID = 524288,
+ ATA_PFLAG_PIO32 = 1048576,
+ ATA_PFLAG_PIO32CHANGE = 2097152,
+ ATA_PFLAG_EXTERNAL = 4194304,
+ ATA_QCFLAG_ACTIVE = 1,
+ ATA_QCFLAG_DMAMAP = 2,
+ ATA_QCFLAG_RTF_FILLED = 4,
+ ATA_QCFLAG_IO = 8,
+ ATA_QCFLAG_RESULT_TF = 16,
+ ATA_QCFLAG_CLEAR_EXCL = 32,
+ ATA_QCFLAG_QUIET = 64,
+ ATA_QCFLAG_RETRY = 128,
+ ATA_QCFLAG_HAS_CDL = 256,
+ ATA_QCFLAG_EH = 65536,
+ ATA_QCFLAG_SENSE_VALID = 131072,
+ ATA_QCFLAG_EH_SCHEDULED = 262144,
+ ATA_QCFLAG_EH_SUCCESS_CMD = 524288,
+ ATA_HOST_SIMPLEX = 1,
+ ATA_HOST_STARTED = 2,
+ ATA_HOST_PARALLEL_SCAN = 4,
+ ATA_HOST_IGNORE_ATA = 8,
+ ATA_HOST_NO_PART = 16,
+ ATA_HOST_NO_SSC = 32,
+ ATA_HOST_NO_DEVSLP = 64,
+ ATA_TMOUT_BOOT = 30000,
+ ATA_TMOUT_BOOT_QUICK = 7000,
+ ATA_TMOUT_INTERNAL_QUICK = 5000,
+ ATA_TMOUT_MAX_PARK = 30000,
+ ATA_TMOUT_FF_WAIT_LONG = 2000,
+ ATA_TMOUT_FF_WAIT = 800,
+ ATA_WAIT_AFTER_RESET = 150,
+ ATA_TMOUT_PMP_SRST_WAIT = 10000,
+ ATA_TMOUT_SPURIOUS_PHY = 10000,
+ BUS_UNKNOWN = 0,
+ BUS_DMA = 1,
+ BUS_IDLE = 2,
+ BUS_NOINTR = 3,
+ BUS_NODATA = 4,
+ BUS_TIMER = 5,
+ BUS_PIO = 6,
+ BUS_EDD = 7,
+ BUS_IDENTIFY = 8,
+ BUS_PACKET = 9,
+ PORT_UNKNOWN = 0,
+ PORT_ENABLED = 1,
+ PORT_DISABLED = 2,
+ ATA_NR_PIO_MODES = 7,
+ ATA_NR_MWDMA_MODES = 5,
+ ATA_NR_UDMA_MODES = 8,
+ ATA_SHIFT_PIO = 0,
+ ATA_SHIFT_MWDMA = 7,
+ ATA_SHIFT_UDMA = 12,
+ ATA_SHIFT_PRIO = 6,
+ ATA_PRIO_HIGH = 2,
+ ATA_DMA_PAD_SZ = 4,
+ ATA_ERING_SIZE = 32,
+ ATA_DEFER_LINK = 1,
+ ATA_DEFER_PORT = 2,
+ ATA_EH_DESC_LEN = 80,
+ ATA_EH_REVALIDATE = 1,
+ ATA_EH_SOFTRESET = 2,
+ ATA_EH_HARDRESET = 4,
+ ATA_EH_RESET = 6,
+ ATA_EH_ENABLE_LINK = 8,
+ ATA_EH_PARK = 32,
+ ATA_EH_GET_SUCCESS_SENSE = 64,
+ ATA_EH_SET_ACTIVE = 128,
+ ATA_EH_PERDEV_MASK = 225,
+ ATA_EH_ALL_ACTIONS = 15,
+ ATA_EHI_HOTPLUGGED = 1,
+ ATA_EHI_NO_AUTOPSY = 4,
+ ATA_EHI_QUIET = 8,
+ ATA_EHI_NO_RECOVERY = 16,
+ ATA_EHI_DID_SOFTRESET = 65536,
+ ATA_EHI_DID_HARDRESET = 131072,
+ ATA_EHI_PRINTINFO = 262144,
+ ATA_EHI_SETMODE = 524288,
+ ATA_EHI_POST_SETMODE = 1048576,
+ ATA_EHI_DID_PRINT_QUIRKS = 2097152,
+ ATA_EHI_DID_RESET = 196608,
+ ATA_EHI_TO_SLAVE_MASK = 12,
+ ATA_EH_MAX_TRIES = 5,
+ ATA_LINK_RESUME_TRIES = 5,
+ ATA_EH_DEV_TRIES = 3,
+ ATA_EH_PMP_TRIES = 5,
+ ATA_EH_PMP_LINK_TRIES = 3,
+ SATA_PMP_RW_TIMEOUT = 3000,
+ ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 8,
+ ATA_QUIRK_DIAGNOSTIC = 1,
+ ATA_QUIRK_NODMA = 2,
+ ATA_QUIRK_NONCQ = 4,
+ ATA_QUIRK_MAX_SEC_128 = 8,
+ ATA_QUIRK_BROKEN_HPA = 16,
+ ATA_QUIRK_DISABLE = 32,
+ ATA_QUIRK_HPA_SIZE = 64,
+ ATA_QUIRK_IVB = 128,
+ ATA_QUIRK_STUCK_ERR = 256,
+ ATA_QUIRK_BRIDGE_OK = 512,
+ ATA_QUIRK_ATAPI_MOD16_DMA = 1024,
+ ATA_QUIRK_FIRMWARE_WARN = 2048,
+ ATA_QUIRK_1_5_GBPS = 4096,
+ ATA_QUIRK_NOSETXFER = 8192,
+ ATA_QUIRK_BROKEN_FPDMA_AA = 16384,
+ ATA_QUIRK_DUMP_ID = 32768,
+ ATA_QUIRK_MAX_SEC_LBA48 = 65536,
+ ATA_QUIRK_ATAPI_DMADIR = 131072,
+ ATA_QUIRK_NO_NCQ_TRIM = 262144,
+ ATA_QUIRK_NOLPM = 524288,
+ ATA_QUIRK_WD_BROKEN_LPM = 1048576,
+ ATA_QUIRK_ZERO_AFTER_TRIM = 2097152,
+ ATA_QUIRK_NO_DMA_LOG = 4194304,
+ ATA_QUIRK_NOTRIM = 8388608,
+ ATA_QUIRK_MAX_SEC_1024 = 16777216,
+ ATA_QUIRK_MAX_TRIM_128M = 33554432,
+ ATA_QUIRK_NO_NCQ_ON_ATI = 67108864,
+ ATA_QUIRK_NO_ID_DEV_LOG = 134217728,
+ ATA_QUIRK_NO_LOG_DIR = 268435456,
+ ATA_QUIRK_NO_FUA = 536870912,
+ ATA_DMA_MASK_ATA = 1,
+ ATA_DMA_MASK_ATAPI = 2,
+ ATA_DMA_MASK_CFA = 4,
+ ATAPI_READ = 0,
+ ATAPI_WRITE = 1,
+ ATAPI_READ_CD = 2,
+ ATAPI_PASS_THRU = 3,
+ ATAPI_MISC = 4,
+ ATA_TIMING_SETUP = 1,
+ ATA_TIMING_ACT8B = 2,
+ ATA_TIMING_REC8B = 4,
+ ATA_TIMING_CYC8B = 8,
+ ATA_TIMING_8BIT = 14,
+ ATA_TIMING_ACTIVE = 16,
+ ATA_TIMING_RECOVER = 32,
+ ATA_TIMING_DMACK_HOLD = 64,
+ ATA_TIMING_CYCLE = 128,
+ ATA_TIMING_UDMA = 256,
+ ATA_TIMING_ALL = 511,
+ ATA_ACPI_FILTER_SETXFER = 1,
+ ATA_ACPI_FILTER_LOCK = 2,
+ ATA_ACPI_FILTER_DIPM = 4,
+ ATA_ACPI_FILTER_FPDMA_OFFSET = 8,
+ ATA_ACPI_FILTER_FPDMA_AA = 16,
+ ATA_ACPI_FILTER_DEFAULT = 7,
+};
+
+enum ata_xfer_mask {
+ ATA_MASK_PIO = 127,
+ ATA_MASK_MWDMA = 3968,
+ ATA_MASK_UDMA = 1044480,
+};
+
+enum ata_completion_errors {
+ AC_ERR_OK = 0,
+ AC_ERR_DEV = 1,
+ AC_ERR_HSM = 2,
+ AC_ERR_TIMEOUT = 4,
+ AC_ERR_MEDIA = 8,
+ AC_ERR_ATA_BUS = 16,
+ AC_ERR_HOST_BUS = 32,
+ AC_ERR_SYSTEM = 64,
+ AC_ERR_INVALID = 128,
+ AC_ERR_OTHER = 256,
+ AC_ERR_NODEV_HINT = 512,
+ AC_ERR_NCQ = 1024,
+};
+
+enum ata_lpm_policy {
+ ATA_LPM_UNKNOWN = 0,
+ ATA_LPM_MAX_POWER = 1,
+ ATA_LPM_MED_POWER = 2,
+ ATA_LPM_MED_POWER_WITH_DIPM = 3,
+ ATA_LPM_MIN_POWER_WITH_PARTIAL = 4,
+ ATA_LPM_MIN_POWER = 5,
+};
+
+struct ata_queued_cmd;
+
+typedef void (*ata_qc_cb_t)(struct ata_queued_cmd *);
+
+struct ata_taskfile {
+ long unsigned int flags;
+ u8 protocol;
+ u8 ctl;
+ u8 hob_feature;
+ u8 hob_nsect;
+ u8 hob_lbal;
+ u8 hob_lbam;
+ u8 hob_lbah;
+ union {
+ u8 error;
+ u8 feature;
+ };
+ u8 nsect;
+ u8 lbal;
+ u8 lbam;
+ u8 lbah;
+ u8 device;
+ union {
+ u8 status;
+ u8 command;
+ };
+ u32 auxiliary;
+};
+
+struct ata_port;
+
+struct ata_device;
+
+struct ata_queued_cmd {
+ struct ata_port *ap;
+ struct ata_device *dev;
+ struct scsi_cmnd *scsicmd;
+ void (*scsidone)(struct scsi_cmnd *);
+ struct ata_taskfile tf;
+ u8 cdb[16];
+ long unsigned int flags;
+ unsigned int tag;
+ unsigned int hw_tag;
+ unsigned int n_elem;
+ unsigned int orig_n_elem;
+ int dma_dir;
+ unsigned int sect_size;
+ unsigned int nbytes;
+ unsigned int extrabytes;
+ unsigned int curbytes;
+ struct scatterlist sgent;
+ struct scatterlist *sg;
+ struct scatterlist *cursg;
+ unsigned int cursg_ofs;
+ unsigned int err_mask;
+ struct ata_taskfile result_tf;
+ ata_qc_cb_t complete_fn;
+ void *private_data;
+ void *lldd_task;
+};
+
+struct ata_link;
+
+typedef int (*ata_prereset_fn_t)(struct ata_link *, long unsigned int);
+
+struct ata_eh_info {
+ struct ata_device *dev;
+ u32 serror;
+ unsigned int err_mask;
+ unsigned int action;
+ unsigned int dev_action[2];
+ unsigned int flags;
+ unsigned int probe_mask;
+ char desc[80];
+ int desc_len;
+};
+
+struct ata_eh_context {
+ struct ata_eh_info i;
+ int tries[2];
+ int cmd_timeout_idx[16];
+ unsigned int classes[2];
+ unsigned int did_probe_mask;
+ unsigned int unloaded_mask;
+ unsigned int saved_ncq_enabled;
+ u8 saved_xfer_mode[2];
+ long unsigned int last_reset;
+};
+
+struct ata_ering_entry {
+ unsigned int eflags;
+ unsigned int err_mask;
+ u64 timestamp;
+};
+
+struct ata_ering {
+ int cursor;
+ struct ata_ering_entry ring[32];
+};
+
+struct ata_cpr_log;
+
+struct ata_cdl;
+
+struct ata_device {
+ struct ata_link *link;
+ unsigned int devno;
+ unsigned int quirks;
+ long unsigned int flags;
+ struct scsi_device *sdev;
+ void *private_data;
+ union acpi_object *gtf_cache;
+ unsigned int gtf_filter;
+ struct device tdev;
+ u64 n_sectors;
+ u64 n_native_sectors;
+ unsigned int class;
+ long unsigned int unpark_deadline;
+ u8 pio_mode;
+ u8 dma_mode;
+ u8 xfer_mode;
+ unsigned int xfer_shift;
+ unsigned int multi_count;
+ unsigned int max_sectors;
+ unsigned int cdb_len;
+ unsigned int pio_mask;
+ unsigned int mwdma_mask;
+ unsigned int udma_mask;
+ u16 cylinders;
+ u16 heads;
+ u16 sectors;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ union {
+ u16 id[256];
+ u32 gscr[128];
+ };
+ u8 devslp_timing[8];
+ u8 ncq_send_recv_cmds[20];
+ u8 ncq_non_data_cmds[64];
+ u32 zac_zoned_cap;
+ u32 zac_zones_optimal_open;
+ u32 zac_zones_optimal_nonseq;
+ u32 zac_zones_max_open;
+ struct ata_cpr_log *cpr_log;
+ struct ata_cdl *cdl;
+ int spdn_cnt;
+ struct ata_ering ering;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ u8 sector_buf[512];
+};
+
+struct ata_link {
+ struct ata_port *ap;
+ int pmp;
+ struct device tdev;
+ unsigned int active_tag;
+ u32 sactive;
+ unsigned int flags;
+ u32 saved_scontrol;
+ unsigned int hw_sata_spd_limit;
+ unsigned int sata_spd_limit;
+ unsigned int sata_spd;
+ enum ata_lpm_policy lpm_policy;
+ struct ata_eh_info eh_info;
+ struct ata_eh_context eh_context;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct ata_device device[2];
+ long unsigned int last_lpm_change;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+typedef int (*ata_reset_fn_t)(struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*ata_postreset_fn_t)(struct ata_link *, unsigned int *);
+
+enum sw_activity {
+ OFF = 0,
+ BLINK_ON = 1,
+ BLINK_OFF = 2,
+};
+
+struct ata_ioports {
+ void *cmd_addr;
+ void *data_addr;
+ void *error_addr;
+ void *feature_addr;
+ void *nsect_addr;
+ void *lbal_addr;
+ void *lbam_addr;
+ void *lbah_addr;
+ void *device_addr;
+ void *status_addr;
+ void *command_addr;
+ void *altstatus_addr;
+ void *ctl_addr;
+ void *bmdma_addr;
+ void *scr_addr;
+};
+
+struct ata_port_operations;
+
+struct ata_host {
+ spinlock_t lock;
+ struct device *dev;
+ void * const *iomap;
+ unsigned int n_ports;
+ unsigned int n_tags;
+ void *private_data;
+ struct ata_port_operations *ops;
+ long unsigned int flags;
+ struct kref kref;
+ struct mutex eh_mutex;
+ struct task_struct *eh_owner;
+ struct ata_port *simplex_claimed;
+ struct ata_port *ports[0];
+};
+
+struct ata_port_operations {
+ int (*qc_defer)(struct ata_queued_cmd *);
+ int (*check_atapi_dma)(struct ata_queued_cmd *);
+ enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *);
+ unsigned int (*qc_issue)(struct ata_queued_cmd *);
+ void (*qc_fill_rtf)(struct ata_queued_cmd *);
+ void (*qc_ncq_fill_rtf)(struct ata_port *, u64);
+ int (*cable_detect)(struct ata_port *);
+ unsigned int (*mode_filter)(struct ata_device *, unsigned int);
+ void (*set_piomode)(struct ata_port *, struct ata_device *);
+ void (*set_dmamode)(struct ata_port *, struct ata_device *);
+ int (*set_mode)(struct ata_link *, struct ata_device **);
+ unsigned int (*read_id)(struct ata_device *, struct ata_taskfile *, __le16 *);
+ void (*dev_config)(struct ata_device *);
+ void (*freeze)(struct ata_port *);
+ void (*thaw)(struct ata_port *);
+ ata_prereset_fn_t prereset;
+ ata_reset_fn_t softreset;
+ ata_reset_fn_t hardreset;
+ ata_postreset_fn_t postreset;
+ ata_prereset_fn_t pmp_prereset;
+ ata_reset_fn_t pmp_softreset;
+ ata_reset_fn_t pmp_hardreset;
+ ata_postreset_fn_t pmp_postreset;
+ void (*error_handler)(struct ata_port *);
+ void (*lost_interrupt)(struct ata_port *);
+ void (*post_internal_cmd)(struct ata_queued_cmd *);
+ void (*sched_eh)(struct ata_port *);
+ void (*end_eh)(struct ata_port *);
+ int (*scr_read)(struct ata_link *, unsigned int, u32 *);
+ int (*scr_write)(struct ata_link *, unsigned int, u32);
+ void (*pmp_attach)(struct ata_port *);
+ void (*pmp_detach)(struct ata_port *);
+ int (*set_lpm)(struct ata_link *, enum ata_lpm_policy, unsigned int);
+ int (*port_suspend)(struct ata_port *, pm_message_t);
+ int (*port_resume)(struct ata_port *);
+ int (*port_start)(struct ata_port *);
+ void (*port_stop)(struct ata_port *);
+ void (*host_stop)(struct ata_host *);
+ void (*sff_dev_select)(struct ata_port *, unsigned int);
+ void (*sff_set_devctl)(struct ata_port *, u8);
+ u8 (*sff_check_status)(struct ata_port *);
+ u8 (*sff_check_altstatus)(struct ata_port *);
+ void (*sff_tf_load)(struct ata_port *, const struct ata_taskfile *);
+ void (*sff_tf_read)(struct ata_port *, struct ata_taskfile *);
+ void (*sff_exec_command)(struct ata_port *, const struct ata_taskfile *);
+ unsigned int (*sff_data_xfer)(struct ata_queued_cmd *, unsigned char *, unsigned int, int);
+ void (*sff_irq_on)(struct ata_port *);
+ bool (*sff_irq_check)(struct ata_port *);
+ void (*sff_irq_clear)(struct ata_port *);
+ void (*sff_drain_fifo)(struct ata_queued_cmd *);
+ void (*bmdma_setup)(struct ata_queued_cmd *);
+ void (*bmdma_start)(struct ata_queued_cmd *);
+ void (*bmdma_stop)(struct ata_queued_cmd *);
+ u8 (*bmdma_status)(struct ata_port *);
+ ssize_t (*em_show)(struct ata_port *, char *);
+ ssize_t (*em_store)(struct ata_port *, const char *, size_t);
+ ssize_t (*sw_activity_show)(struct ata_device *, char *);
+ ssize_t (*sw_activity_store)(struct ata_device *, enum sw_activity);
+ ssize_t (*transmit_led_message)(struct ata_port *, u32, ssize_t);
+ const struct ata_port_operations *inherits;
+};
+
+struct ata_port_stats {
+ long unsigned int unhandled_irq;
+ long unsigned int idle_irq;
+ long unsigned int rw_reqbuf;
+};
+
+struct ata_acpi_drive {
+ u32 pio;
+ u32 dma;
+};
+
+struct ata_acpi_gtm {
+ struct ata_acpi_drive drive[2];
+ u32 flags;
+};
+
+struct ata_port {
+ struct Scsi_Host *scsi_host;
+ struct ata_port_operations *ops;
+ spinlock_t *lock;
+ long unsigned int flags;
+ unsigned int pflags;
+ unsigned int print_id;
+ unsigned int port_no;
+ struct ata_ioports ioaddr;
+ u8 ctl;
+ u8 last_ctl;
+ struct ata_link *sff_pio_task_link;
+ struct delayed_work sff_pio_task;
+ struct ata_bmdma_prd *bmdma_prd;
+ dma_addr_t bmdma_prd_dma;
+ unsigned int pio_mask;
+ unsigned int mwdma_mask;
+ unsigned int udma_mask;
+ unsigned int cbl;
+ struct ata_queued_cmd qcmd[33];
+ u64 qc_active;
+ int nr_active_links;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct ata_link link;
+ struct ata_link *slave_link;
+ int nr_pmp_links;
+ struct ata_link *pmp_link;
+ struct ata_link *excl_link;
+ struct ata_port_stats stats;
+ struct ata_host *host;
+ struct device *dev;
+ struct device tdev;
+ struct mutex scsi_scan_mutex;
+ struct delayed_work hotplug_task;
+ struct delayed_work scsi_rescan_task;
+ unsigned int hsm_task_state;
+ struct list_head eh_done_q;
+ wait_queue_head_t eh_wait_q;
+ int eh_tries;
+ struct completion park_req_pending;
+ pm_message_t pm_mesg;
+ enum ata_lpm_policy target_lpm_policy;
+ struct timer_list fastdrain_timer;
+ unsigned int fastdrain_cnt;
+ async_cookie_t cookie;
+ int em_message_type;
+ void *private_data;
+ struct ata_acpi_gtm __acpi_init_gtm;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct ata_cpr {
+ u8 num;
+ u8 num_storage_elements;
+ u64 start_lba;
+ u64 num_lbas;
+};
+
+struct ata_cpr_log {
+ u8 nr_cpr;
+ struct ata_cpr cpr[0];
+};
+
+struct ata_cdl {
+ u8 desc_log_buf[512];
+ u8 ncq_sense_log_buf[1024];
+};
+
+struct ata_port_info {
+ long unsigned int flags;
+ long unsigned int link_flags;
+ unsigned int pio_mask;
+ unsigned int mwdma_mask;
+ unsigned int udma_mask;
+ struct ata_port_operations *port_ops;
+ void *private_data;
+};
+
+struct ata_timing {
+ short unsigned int mode;
+ short unsigned int setup;
+ short unsigned int act8b;
+ short unsigned int rec8b;
+ short unsigned int cyc8b;
+ short unsigned int active;
+ short unsigned int recover;
+ short unsigned int dmack_hold;
+ short unsigned int cycle;
+ short unsigned int udma;
+};
+
+struct pci_bits {
+ unsigned int reg;
+ unsigned int width;
+ long unsigned int mask;
+ long unsigned int val;
+};
+
+enum ata_link_iter_mode {
+ ATA_LITER_EDGE = 0,
+ ATA_LITER_HOST_FIRST = 1,
+ ATA_LITER_PMP_FIRST = 2,
+};
+
+enum ata_dev_iter_mode {
+ ATA_DITER_ENABLED = 0,
+ ATA_DITER_ENABLED_REVERSE = 1,
+ ATA_DITER_ALL = 2,
+ ATA_DITER_ALL_REVERSE = 3,
+};
+
+enum {
+ ATA_READID_POSTRESET = 1,
+ ATA_DNXFER_PIO = 0,
+ ATA_DNXFER_DMA = 1,
+ ATA_DNXFER_40C = 2,
+ ATA_DNXFER_FORCE_PIO = 3,
+ ATA_DNXFER_FORCE_PIO0 = 4,
+ ATA_DNXFER_QUIET = -2147483648,
+};
+
+struct ata_force_param {
+ const char *name;
+ u8 cbl;
+ u8 spd_limit;
+ unsigned int xfer_mask;
+ unsigned int quirk_on;
+ unsigned int quirk_off;
+ u16 lflags_on;
+ u16 lflags_off;
+};
+
+struct ata_force_ent {
+ int port;
+ int device;
+ struct ata_force_param param;
+};
+
+struct ata_xfer_ent {
+ int shift;
+ int bits;
+ u8 base;
+};
+
+struct ata_dev_quirks_entry {
+ const char *model_num;
+ const char *model_rev;
+ unsigned int quirks;
+};
+
+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;
+ long unsigned int differential_clk_rate;
+ unsigned int lanes;
+ bool is_slave;
+};
+
+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,
+};
+
+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;
+
+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 *);
+ int (*connect)(struct phy *, int);
+ int (*disconnect)(struct phy *, int);
+ void (*release)(struct phy *);
+ struct module *owner;
+};
+
+struct phy_attrs {
+ u32 bus_width;
+ u32 max_link_rate;
+ enum phy_mode mode;
+};
+
+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;
+};
+
+enum {
+ AHCI_MAX_PORTS = 32,
+ AHCI_MAX_SG = 168,
+ AHCI_DMA_BOUNDARY = 4294967295,
+ AHCI_MAX_CMDS = 32,
+ AHCI_CMD_SZ = 32,
+ AHCI_CMD_SLOT_SZ = 1024,
+ AHCI_RX_FIS_SZ = 256,
+ AHCI_CMD_TBL_CDB = 64,
+ AHCI_CMD_TBL_HDR_SZ = 128,
+ AHCI_CMD_TBL_SZ = 2816,
+ AHCI_CMD_TBL_AR_SZ = 90112,
+ AHCI_PORT_PRIV_DMA_SZ = 91392,
+ AHCI_PORT_PRIV_FBS_DMA_SZ = 95232,
+ AHCI_IRQ_ON_SG = 2147483648,
+ AHCI_CMD_ATAPI = 32,
+ AHCI_CMD_WRITE = 64,
+ AHCI_CMD_PREFETCH = 128,
+ AHCI_CMD_RESET = 256,
+ AHCI_CMD_CLR_BUSY = 1024,
+ RX_FIS_PIO_SETUP = 32,
+ RX_FIS_D2H_REG = 64,
+ RX_FIS_SDB = 88,
+ RX_FIS_UNK = 96,
+ HOST_CAP = 0,
+ HOST_CTL = 4,
+ HOST_IRQ_STAT = 8,
+ HOST_PORTS_IMPL = 12,
+ HOST_VERSION = 16,
+ HOST_EM_LOC = 28,
+ HOST_EM_CTL = 32,
+ HOST_CAP2 = 36,
+ HOST_RESET = 1,
+ HOST_IRQ_EN = 2,
+ HOST_MRSM = 4,
+ HOST_AHCI_EN = 2147483648,
+ HOST_CAP_SXS = 32,
+ HOST_CAP_EMS = 64,
+ HOST_CAP_CCC = 128,
+ HOST_CAP_PART = 8192,
+ HOST_CAP_SSC = 16384,
+ HOST_CAP_PIO_MULTI = 32768,
+ HOST_CAP_FBS = 65536,
+ HOST_CAP_PMP = 131072,
+ HOST_CAP_ONLY = 262144,
+ HOST_CAP_CLO = 16777216,
+ HOST_CAP_LED = 33554432,
+ HOST_CAP_ALPM = 67108864,
+ HOST_CAP_SSS = 134217728,
+ HOST_CAP_MPS = 268435456,
+ HOST_CAP_SNTF = 536870912,
+ HOST_CAP_NCQ = 1073741824,
+ HOST_CAP_64 = 2147483648,
+ HOST_CAP2_BOH = 1,
+ HOST_CAP2_NVMHCI = 2,
+ HOST_CAP2_APST = 4,
+ HOST_CAP2_SDS = 8,
+ HOST_CAP2_SADM = 16,
+ HOST_CAP2_DESO = 32,
+ PORT_LST_ADDR = 0,
+ PORT_LST_ADDR_HI = 4,
+ PORT_FIS_ADDR = 8,
+ PORT_FIS_ADDR_HI = 12,
+ PORT_IRQ_STAT = 16,
+ PORT_IRQ_MASK = 20,
+ PORT_CMD = 24,
+ PORT_TFDATA = 32,
+ PORT_SIG = 36,
+ PORT_CMD_ISSUE = 56,
+ PORT_SCR_STAT = 40,
+ PORT_SCR_CTL = 44,
+ PORT_SCR_ERR = 48,
+ PORT_SCR_ACT = 52,
+ PORT_SCR_NTF = 60,
+ PORT_FBS = 64,
+ PORT_DEVSLP = 68,
+ PORT_IRQ_COLD_PRES = 2147483648,
+ PORT_IRQ_TF_ERR = 1073741824,
+ PORT_IRQ_HBUS_ERR = 536870912,
+ PORT_IRQ_HBUS_DATA_ERR = 268435456,
+ PORT_IRQ_IF_ERR = 134217728,
+ PORT_IRQ_IF_NONFATAL = 67108864,
+ PORT_IRQ_OVERFLOW = 16777216,
+ PORT_IRQ_BAD_PMP = 8388608,
+ PORT_IRQ_PHYRDY = 4194304,
+ PORT_IRQ_DMPS = 128,
+ PORT_IRQ_CONNECT = 64,
+ PORT_IRQ_SG_DONE = 32,
+ PORT_IRQ_UNK_FIS = 16,
+ PORT_IRQ_SDB_FIS = 8,
+ PORT_IRQ_DMAS_FIS = 4,
+ PORT_IRQ_PIOS_FIS = 2,
+ PORT_IRQ_D2H_REG_FIS = 1,
+ PORT_IRQ_FREEZE = 683671632,
+ PORT_IRQ_ERROR = 2025848912,
+ DEF_PORT_IRQ = 2025848959,
+ PORT_CMD_ASP = 134217728,
+ PORT_CMD_ALPE = 67108864,
+ PORT_CMD_ATAPI = 16777216,
+ PORT_CMD_FBSCP = 4194304,
+ PORT_CMD_ESP = 2097152,
+ PORT_CMD_CPD = 1048576,
+ PORT_CMD_MPSP = 524288,
+ PORT_CMD_HPCP = 262144,
+ PORT_CMD_PMP = 131072,
+ PORT_CMD_LIST_ON = 32768,
+ PORT_CMD_FIS_ON = 16384,
+ PORT_CMD_FIS_RX = 16,
+ PORT_CMD_CLO = 8,
+ PORT_CMD_POWER_ON = 4,
+ PORT_CMD_SPIN_UP = 2,
+ PORT_CMD_START = 1,
+ PORT_CMD_ICC_MASK = 4026531840,
+ PORT_CMD_ICC_ACTIVE = 268435456,
+ PORT_CMD_ICC_PARTIAL = 536870912,
+ PORT_CMD_ICC_SLUMBER = 1610612736,
+ PORT_CMD_CAP = 8126464,
+ PORT_FBS_DWE_OFFSET = 16,
+ PORT_FBS_ADO_OFFSET = 12,
+ PORT_FBS_DEV_OFFSET = 8,
+ PORT_FBS_DEV_MASK = 3840,
+ PORT_FBS_SDE = 4,
+ PORT_FBS_DEC = 2,
+ PORT_FBS_EN = 1,
+ PORT_DEVSLP_DM_OFFSET = 25,
+ PORT_DEVSLP_DM_MASK = 503316480,
+ PORT_DEVSLP_DITO_OFFSET = 15,
+ PORT_DEVSLP_MDAT_OFFSET = 10,
+ PORT_DEVSLP_DETO_OFFSET = 2,
+ PORT_DEVSLP_DSP = 2,
+ PORT_DEVSLP_ADSE = 1,
+ AHCI_HFLAG_NO_NCQ = 1,
+ AHCI_HFLAG_IGN_IRQ_IF_ERR = 2,
+ AHCI_HFLAG_IGN_SERR_INTERNAL = 4,
+ AHCI_HFLAG_32BIT_ONLY = 8,
+ AHCI_HFLAG_MV_PATA = 16,
+ AHCI_HFLAG_NO_MSI = 32,
+ AHCI_HFLAG_NO_PMP = 64,
+ AHCI_HFLAG_SECT255 = 256,
+ AHCI_HFLAG_YES_NCQ = 512,
+ AHCI_HFLAG_NO_SUSPEND = 1024,
+ AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = 2048,
+ AHCI_HFLAG_NO_SNTF = 4096,
+ AHCI_HFLAG_NO_FPDMA_AA = 8192,
+ AHCI_HFLAG_YES_FBS = 16384,
+ AHCI_HFLAG_DELAY_ENGINE = 32768,
+ AHCI_HFLAG_NO_DEVSLP = 131072,
+ AHCI_HFLAG_NO_FBS = 262144,
+ AHCI_HFLAG_MULTI_MSI = 1048576,
+ AHCI_HFLAG_WAKE_BEFORE_STOP = 4194304,
+ AHCI_HFLAG_YES_ALPM = 8388608,
+ AHCI_HFLAG_NO_WRITE_TO_RO = 16777216,
+ AHCI_HFLAG_SUSPEND_PHYS = 33554432,
+ AHCI_HFLAG_NO_SXS = 67108864,
+ AHCI_HFLAG_43BIT_ONLY = 134217728,
+ AHCI_HFLAG_INTEL_PCS_QUIRK = 268435456,
+ AHCI_FLAG_COMMON = 393346,
+ ICH_MAP = 144,
+ PCS_6 = 146,
+ PCS_7 = 148,
+ EM_MAX_SLOTS = 15,
+ EM_MAX_RETRY = 5,
+ EM_CTL_RST = 512,
+ EM_CTL_TM = 256,
+ EM_CTL_MR = 1,
+ EM_CTL_ALHD = 67108864,
+ EM_CTL_XMT = 33554432,
+ EM_CTL_SMB = 16777216,
+ EM_CTL_SGPIO = 524288,
+ EM_CTL_SES = 262144,
+ EM_CTL_SAFTE = 131072,
+ EM_CTL_LED = 65536,
+ EM_MSG_TYPE_LED = 1,
+ EM_MSG_TYPE_SAFTE = 2,
+ EM_MSG_TYPE_SES2 = 4,
+ EM_MSG_TYPE_SGPIO = 8,
+};
+
+struct reset_control;
+
+struct ahci_host_priv {
+ unsigned int flags;
+ u32 mask_port_map;
+ void *mmio;
+ u32 cap;
+ u32 cap2;
+ u32 version;
+ u32 port_map;
+ u32 saved_cap;
+ u32 saved_cap2;
+ u32 saved_port_map;
+ u32 saved_port_cap[32];
+ u32 em_loc;
+ u32 em_buf_sz;
+ u32 em_msg_type;
+ u32 remapped_nvme;
+ bool got_runtime_pm;
+ unsigned int n_clks;
+ struct clk_bulk_data *clks;
+ unsigned int f_rsts;
+ struct reset_control *rsts;
+ struct regulator **target_pwrs;
+ struct regulator *ahci_regulator;
+ struct regulator *phy_regulator;
+ struct phy **phys;
+ unsigned int nports;
+ void *plat_data;
+ unsigned int irq;
+ void (*start_engine)(struct ata_port *);
+ int (*stop_engine)(struct ata_port *);
+ irqreturn_t (*irq_handler)(int, void *);
+ int (*get_irq_vector)(struct ata_host *, int);
+};
+
+struct mtd_ecc_stats {
+ __u32 corrected;
+ __u32 failed;
+ __u32 badblocks;
+ __u32 bbtblocks;
+};
+
+struct mtd_debug_info {
+ struct dentry *dfs_dir;
+};
+
+struct mtd_part {
+ struct list_head node;
+ u64 offset;
+ u64 size;
+ u32 flags;
+};
+
+struct mtd_master {
+ struct mutex partitions_lock;
+ struct mutex chrdev_lock;
+ unsigned int suspended: 1;
+};
+
+struct mtd_ooblayout_ops;
+
+struct mtd_pairing_scheme;
+
+struct mtd_erase_region_info;
+
+struct erase_info;
+
+struct mtd_oob_ops;
+
+struct otp_info;
+
+struct nvmem_device;
+
+struct mtd_info {
+ u_char type;
+ uint32_t flags;
+ uint64_t size;
+ uint32_t erasesize;
+ uint32_t writesize;
+ uint32_t writebufsize;
+ uint32_t oobsize;
+ uint32_t oobavail;
+ unsigned int erasesize_shift;
+ unsigned int writesize_shift;
+ unsigned int erasesize_mask;
+ unsigned int writesize_mask;
+ unsigned int bitflip_threshold;
+ const char *name;
+ int index;
+ const struct mtd_ooblayout_ops *ooblayout;
+ const struct mtd_pairing_scheme *pairing;
+ unsigned int ecc_step_size;
+ unsigned int ecc_strength;
+ int numeraseregions;
+ struct mtd_erase_region_info *eraseregions;
+ int (*_erase)(struct mtd_info *, struct erase_info *);
+ int (*_point)(struct mtd_info *, loff_t, size_t, size_t *, void **, resource_size_t *);
+ int (*_unpoint)(struct mtd_info *, loff_t, size_t);
+ int (*_read)(struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+ int (*_write)(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
+ int (*_panic_write)(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
+ int (*_read_oob)(struct mtd_info *, loff_t, struct mtd_oob_ops *);
+ int (*_write_oob)(struct mtd_info *, loff_t, struct mtd_oob_ops *);
+ int (*_get_fact_prot_info)(struct mtd_info *, size_t, size_t *, struct otp_info *);
+ int (*_read_fact_prot_reg)(struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+ int (*_get_user_prot_info)(struct mtd_info *, size_t, size_t *, struct otp_info *);
+ int (*_read_user_prot_reg)(struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+ int (*_write_user_prot_reg)(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
+ int (*_lock_user_prot_reg)(struct mtd_info *, loff_t, size_t);
+ int (*_erase_user_prot_reg)(struct mtd_info *, loff_t, size_t);
+ int (*_writev)(struct mtd_info *, const struct kvec *, long unsigned int, loff_t, size_t *);
+ void (*_sync)(struct mtd_info *);
+ int (*_lock)(struct mtd_info *, loff_t, uint64_t);
+ int (*_unlock)(struct mtd_info *, loff_t, uint64_t);
+ int (*_is_locked)(struct mtd_info *, loff_t, uint64_t);
+ int (*_block_isreserved)(struct mtd_info *, loff_t);
+ int (*_block_isbad)(struct mtd_info *, loff_t);
+ int (*_block_markbad)(struct mtd_info *, loff_t);
+ int (*_max_bad_blocks)(struct mtd_info *, loff_t, size_t);
+ int (*_suspend)(struct mtd_info *);
+ void (*_resume)(struct mtd_info *);
+ void (*_reboot)(struct mtd_info *);
+ int (*_get_device)(struct mtd_info *);
+ void (*_put_device)(struct mtd_info *);
+ bool oops_panic_write;
+ struct notifier_block reboot_notifier;
+ struct mtd_ecc_stats ecc_stats;
+ int subpage_sft;
+ void *priv;
+ struct module *owner;
+ struct device dev;
+ struct kref refcnt;
+ struct mtd_debug_info dbg;
+ struct nvmem_device *nvmem;
+ struct nvmem_device *otp_user_nvmem;
+ struct nvmem_device *otp_factory_nvmem;
+ struct mtd_info *parent;
+ struct list_head partitions;
+ struct mtd_part part;
+ struct mtd_master master;
+};
+
+struct mtd_blktrans_ops;
+
+struct mtd_blktrans_dev {
+ struct mtd_blktrans_ops *tr;
+ struct list_head list;
+ struct mtd_info *mtd;
+ struct mutex lock;
+ int devnum;
+ bool bg_stop;
+ long unsigned int size;
+ int readonly;
+ int open;
+ struct kref ref;
+ struct gendisk *disk;
+ struct attribute_group *disk_attributes;
+ struct request_queue *rq;
+ struct list_head rq_list;
+ struct blk_mq_tag_set *tag_set;
+ spinlock_t queue_lock;
+ void *priv;
+ bool writable;
+};
+
+struct mtd_blktrans_ops {
+ char *name;
+ int major;
+ int part_bits;
+ int blksize;
+ int blkshift;
+ int (*readsect)(struct mtd_blktrans_dev *, long unsigned int, char *);
+ int (*writesect)(struct mtd_blktrans_dev *, long unsigned int, char *);
+ int (*discard)(struct mtd_blktrans_dev *, long unsigned int, unsigned int);
+ void (*background)(struct mtd_blktrans_dev *);
+ int (*getgeo)(struct mtd_blktrans_dev *, struct hd_geometry *);
+ int (*flush)(struct mtd_blktrans_dev *);
+ int (*open)(struct mtd_blktrans_dev *);
+ void (*release)(struct mtd_blktrans_dev *);
+ void (*add_mtd)(struct mtd_blktrans_ops *, struct mtd_info *);
+ void (*remove_dev)(struct mtd_blktrans_dev *);
+ struct list_head devs;
+ struct list_head list;
+ struct module *owner;
+};
+
+struct hd_geometry {
+ unsigned char heads;
+ unsigned char sectors;
+ short unsigned int cylinders;
+ long unsigned int start;
+};
+
+struct otp_info {
+ __u32 start;
+ __u32 length;
+ __u32 locked;
+};
+
+struct erase_info {
+ uint64_t addr;
+ uint64_t len;
+ uint64_t fail_addr;
+};
+
+struct mtd_erase_region_info {
+ uint64_t offset;
+ uint32_t erasesize;
+ uint32_t numblocks;
+ long unsigned int *lockmap;
+};
+
+struct mtd_req_stats {
+ unsigned int uncorrectable_errors;
+ unsigned int corrected_bitflips;
+ unsigned int max_bitflips;
+};
+
+struct mtd_oob_ops {
+ unsigned int mode;
+ size_t len;
+ size_t retlen;
+ size_t ooblen;
+ size_t oobretlen;
+ uint32_t ooboffs;
+ uint8_t *datbuf;
+ uint8_t *oobbuf;
+ struct mtd_req_stats *stats;
+};
+
+struct mtd_oob_region {
+ u32 offset;
+ u32 length;
+};
+
+struct mtd_ooblayout_ops {
+ int (*ecc)(struct mtd_info *, int, struct mtd_oob_region *);
+ int (*free)(struct mtd_info *, int, struct mtd_oob_region *);
+};
+
+struct mtd_pairing_info {
+ int pair;
+ int group;
+};
+
+struct mtd_pairing_scheme {
+ int ngroups;
+ int (*get_info)(struct mtd_info *, int, struct mtd_pairing_info *);
+ int (*get_wunit)(struct mtd_info *, const struct mtd_pairing_info *);
+};
+
+struct mtd_notifier {
+ void (*add)(struct mtd_info *);
+ void (*remove)(struct mtd_info *);
+ struct list_head list;
+};
+
+enum {
+ GENHD_FL_REMOVABLE = 1,
+ GENHD_FL_HIDDEN = 2,
+ GENHD_FL_NO_PART = 4,
+};
+
+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 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 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 spi_delay {
+ u16 value;
+ u8 unit;
+};
+
+struct spi_controller;
+
+struct spi_device {
+ struct device dev;
+ struct spi_controller *controller;
+ u32 max_speed_hz;
+ u8 chip_select[16];
+ 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[16];
+ struct spi_delay word_delay;
+ struct spi_delay cs_setup;
+ struct spi_delay cs_hold;
+ struct spi_delay cs_inactive;
+ struct spi_statistics *pcpu_statistics;
+ u32 cs_index_mask: 16;
+};
+
+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 fallback;
+ bool last_cs_mode_high;
+ s8 last_cs[16];
+ u32 last_cs_index_mask: 16;
+ struct completion xfer_completion;
+ size_t max_dma_len;
+ int (*optimize_message)(struct spi_message *);
+ int (*unoptimize_message)(struct spi_message *);
+ 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 *);
+ 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 *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;
+ long unsigned int irq_flags;
+ bool queue_empty;
+ bool must_async;
+ bool defer_optimize_message;
+};
+
+struct spi_message {
+ struct list_head transfers;
+ struct spi_device *spi;
+ bool pre_optimized;
+ bool optimized;
+ bool prepared;
+ int status;
+ void (*complete)(void *);
+ void *context;
+ unsigned int frame_length;
+ unsigned int actual_length;
+ struct list_head queue;
+ void *state;
+ void *opt_state;
+ struct list_head resources;
+};
+
+struct ptp_system_timestamp;
+
+struct spi_transfer {
+ const void *tx_buf;
+ void *rx_buf;
+ unsigned int len;
+ u16 error;
+ bool tx_sg_mapped;
+ bool rx_sg_mapped;
+ struct sg_table tx_sg;
+ struct sg_table rx_sg;
+ dma_addr_t tx_dma;
+ dma_addr_t rx_dma;
+ unsigned int dummy_data: 1;
+ unsigned int cs_off: 1;
+ unsigned int cs_change: 1;
+ unsigned int tx_nbits: 4;
+ unsigned int rx_nbits: 4;
+ 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;
+};
+
+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, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct spi_controller_mem_caps {
+ bool dtr;
+ bool ecc;
+};
+
+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;
+};
+
+struct spi_mem {
+ struct spi_device *spi;
+ void *drvpriv;
+ const char *name;
+};
+
+enum spi_nor_protocol {
+ SNOR_PROTO_1_1_1 = 65793,
+ SNOR_PROTO_1_1_2 = 65794,
+ SNOR_PROTO_1_1_4 = 65796,
+ SNOR_PROTO_1_1_8 = 65800,
+ SNOR_PROTO_1_2_2 = 66050,
+ SNOR_PROTO_1_4_4 = 66564,
+ SNOR_PROTO_1_8_8 = 67592,
+ SNOR_PROTO_2_2_2 = 131586,
+ SNOR_PROTO_4_4_4 = 263172,
+ SNOR_PROTO_8_8_8 = 526344,
+ SNOR_PROTO_1_1_1_DTR = 16843009,
+ SNOR_PROTO_1_2_2_DTR = 16843266,
+ SNOR_PROTO_1_4_4_DTR = 16843780,
+ SNOR_PROTO_1_8_8_DTR = 16844808,
+ SNOR_PROTO_8_8_8_DTR = 17303560,
+};
+
+struct spi_nor_hwcaps {
+ u32 mask;
+};
+
+struct spi_nor;
+
+struct spi_nor_controller_ops {
+ int (*prepare)(struct spi_nor *);
+ void (*unprepare)(struct spi_nor *);
+ int (*read_reg)(struct spi_nor *, u8, u8 *, size_t);
+ int (*write_reg)(struct spi_nor *, u8, const u8 *, size_t);
+ ssize_t (*read)(struct spi_nor *, loff_t, size_t, u8 *);
+ ssize_t (*write)(struct spi_nor *, loff_t, size_t, const u8 *);
+ int (*erase)(struct spi_nor *, loff_t);
+};
+
+struct spi_nor_rww {
+ wait_queue_head_t wait;
+ bool ongoing_io;
+ bool ongoing_rd;
+ bool ongoing_pe;
+ unsigned int used_banks;
+};
+
+enum spi_nor_cmd_ext {
+ SPI_NOR_EXT_NONE = 0,
+ SPI_NOR_EXT_REPEAT = 1,
+ SPI_NOR_EXT_INVERT = 2,
+ SPI_NOR_EXT_HEX = 3,
+};
+
+struct flash_info;
+
+struct spi_nor_manufacturer;
+
+struct sfdp;
+
+struct spi_nor_flash_parameter;
+
+struct spi_nor {
+ struct mtd_info mtd;
+ struct mutex lock;
+ struct spi_nor_rww rww;
+ struct device *dev;
+ struct spi_mem *spimem;
+ u8 *bouncebuf;
+ size_t bouncebuf_size;
+ u8 *id;
+ const struct flash_info *info;
+ const struct spi_nor_manufacturer *manufacturer;
+ u8 addr_nbytes;
+ u8 erase_opcode;
+ u8 read_opcode;
+ u8 read_dummy;
+ u8 program_opcode;
+ enum spi_nor_protocol read_proto;
+ enum spi_nor_protocol write_proto;
+ enum spi_nor_protocol reg_proto;
+ bool sst_write_second;
+ u32 flags;
+ enum spi_nor_cmd_ext cmd_ext_type;
+ struct sfdp *sfdp;
+ struct dentry *debugfs_root;
+ const struct spi_nor_controller_ops *controller_ops;
+ struct spi_nor_flash_parameter *params;
+ struct {
+ struct spi_mem_dirmap_desc *rdesc;
+ struct spi_mem_dirmap_desc *wdesc;
+ } dirmap;
+ void *priv;
+};
+
+struct spi_nor_id;
+
+struct spi_nor_otp_organization;
+
+struct spi_nor_fixups;
+
+struct flash_info {
+ char *name;
+ const struct spi_nor_id *id;
+ size_t size;
+ unsigned int sector_size;
+ u16 page_size;
+ u8 n_banks;
+ u8 addr_nbytes;
+ u16 flags;
+ u8 no_sfdp_flags;
+ u8 fixup_flags;
+ u8 mfr_flags;
+ const struct spi_nor_otp_organization *otp;
+ const struct spi_nor_fixups *fixups;
+};
+
+struct spi_nor_manufacturer {
+ const char *name;
+ const struct flash_info *parts;
+ unsigned int nparts;
+ const struct spi_nor_fixups *fixups;
+};
+
+struct sfdp {
+ size_t num_dwords;
+ u32 *dwords;
+};
+
+struct spi_nor_read_command {
+ u8 num_mode_clocks;
+ u8 num_wait_states;
+ u8 opcode;
+ enum spi_nor_protocol proto;
+};
+
+struct spi_nor_pp_command {
+ u8 opcode;
+ enum spi_nor_protocol proto;
+};
+
+struct spi_nor_erase_region {
+ u64 offset;
+ u64 size;
+ u8 erase_mask;
+ bool overlaid;
+};
+
+struct spi_nor_erase_type {
+ u32 size;
+ u32 size_shift;
+ u32 size_mask;
+ u8 opcode;
+ u8 idx;
+};
+
+struct spi_nor_erase_map {
+ struct spi_nor_erase_region *regions;
+ struct spi_nor_erase_region uniform_region;
+ struct spi_nor_erase_type erase_type[4];
+ unsigned int n_regions;
+};
+
+struct spi_nor_otp_ops;
+
+struct spi_nor_otp {
+ const struct spi_nor_otp_organization *org;
+ const struct spi_nor_otp_ops *ops;
+};
+
+struct spi_nor_locking_ops;
+
+struct spi_nor_flash_parameter {
+ u64 bank_size;
+ u64 size;
+ u32 writesize;
+ u32 page_size;
+ u8 addr_nbytes;
+ u8 addr_mode_nbytes;
+ u8 rdsr_dummy;
+ u8 rdsr_addr_nbytes;
+ u8 n_banks;
+ u8 n_dice;
+ u8 die_erase_opcode;
+ u32 *vreg_offset;
+ struct spi_nor_hwcaps hwcaps;
+ struct spi_nor_read_command reads[16];
+ struct spi_nor_pp_command page_programs[8];
+ struct spi_nor_erase_map erase_map;
+ struct spi_nor_otp otp;
+ int (*set_octal_dtr)(struct spi_nor *, bool);
+ int (*quad_enable)(struct spi_nor *);
+ int (*set_4byte_addr_mode)(struct spi_nor *, bool);
+ int (*ready)(struct spi_nor *);
+ const struct spi_nor_locking_ops *locking_ops;
+ void *priv;
+};
+
+struct sfdp_bfpt {
+ u32 dwords[20];
+};
+
+struct sfdp_parameter_header {
+ u8 id_lsb;
+ u8 minor;
+ u8 major;
+ u8 length;
+ u8 parameter_table_pointer[3];
+ u8 id_msb;
+};
+
+enum spi_nor_read_command_index {
+ SNOR_CMD_READ = 0,
+ SNOR_CMD_READ_FAST = 1,
+ SNOR_CMD_READ_1_1_1_DTR = 2,
+ SNOR_CMD_READ_1_1_2 = 3,
+ SNOR_CMD_READ_1_2_2 = 4,
+ SNOR_CMD_READ_2_2_2 = 5,
+ SNOR_CMD_READ_1_2_2_DTR = 6,
+ SNOR_CMD_READ_1_1_4 = 7,
+ SNOR_CMD_READ_1_4_4 = 8,
+ SNOR_CMD_READ_4_4_4 = 9,
+ SNOR_CMD_READ_1_4_4_DTR = 10,
+ SNOR_CMD_READ_1_1_8 = 11,
+ SNOR_CMD_READ_1_8_8 = 12,
+ SNOR_CMD_READ_8_8_8 = 13,
+ SNOR_CMD_READ_1_8_8_DTR = 14,
+ SNOR_CMD_READ_8_8_8_DTR = 15,
+ SNOR_CMD_READ_MAX = 16,
+};
+
+enum spi_nor_pp_command_index {
+ SNOR_CMD_PP = 0,
+ SNOR_CMD_PP_1_1_4 = 1,
+ SNOR_CMD_PP_1_4_4 = 2,
+ SNOR_CMD_PP_4_4_4 = 3,
+ SNOR_CMD_PP_1_1_8 = 4,
+ SNOR_CMD_PP_1_8_8 = 5,
+ SNOR_CMD_PP_8_8_8 = 6,
+ SNOR_CMD_PP_8_8_8_DTR = 7,
+ SNOR_CMD_PP_MAX = 8,
+};
+
+struct spi_nor_locking_ops {
+ int (*lock)(struct spi_nor *, loff_t, u64);
+ int (*unlock)(struct spi_nor *, loff_t, u64);
+ int (*is_locked)(struct spi_nor *, loff_t, u64);
+};
+
+struct spi_nor_otp_organization {
+ size_t len;
+ loff_t base;
+ loff_t offset;
+ unsigned int n_regions;
+};
+
+struct spi_nor_otp_ops {
+ int (*read)(struct spi_nor *, loff_t, size_t, u8 *);
+ int (*write)(struct spi_nor *, loff_t, size_t, const u8 *);
+ int (*lock)(struct spi_nor *, unsigned int);
+ int (*erase)(struct spi_nor *, loff_t);
+ int (*is_locked)(struct spi_nor *, unsigned int);
+};
+
+struct spi_nor_fixups {
+ void (*default_init)(struct spi_nor *);
+ int (*post_bfpt)(struct spi_nor *, const struct sfdp_parameter_header *, const struct sfdp_bfpt *);
+ int (*post_sfdp)(struct spi_nor *);
+ int (*late_init)(struct spi_nor *);
+};
+
+struct spi_nor_id {
+ const u8 *bytes;
+ u8 len;
+};
+
+enum string_size_units {
+ STRING_UNITS_10 = 0,
+ STRING_UNITS_2 = 1,
+ STRING_UNITS_MASK = 1,
+ STRING_UNITS_NO_SPACE = 1073741824,
+ STRING_UNITS_NO_BYTES = 2147483648,
+};
+
+enum spi_nor_option_flags {
+ SNOR_F_HAS_SR_TB = 1,
+ SNOR_F_NO_OP_CHIP_ERASE = 2,
+ SNOR_F_BROKEN_RESET = 4,
+ SNOR_F_4B_OPCODES = 8,
+ SNOR_F_HAS_4BAIT = 16,
+ SNOR_F_HAS_LOCK = 32,
+ SNOR_F_HAS_16BIT_SR = 64,
+ SNOR_F_NO_READ_CR = 128,
+ SNOR_F_HAS_SR_TB_BIT6 = 256,
+ SNOR_F_HAS_4BIT_BP = 512,
+ SNOR_F_HAS_SR_BP3_BIT6 = 1024,
+ SNOR_F_IO_MODE_EN_VOLATILE = 2048,
+ SNOR_F_SOFT_RESET = 4096,
+ SNOR_F_SWP_IS_VOLATILE = 8192,
+ SNOR_F_RWW = 16384,
+ SNOR_F_ECC = 32768,
+ SNOR_F_NO_WP = 65536,
+};
+
+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 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;
+};
+
+struct mii_bus;
+
+struct mdio_device {
+ struct device dev;
+ struct mii_bus *bus;
+ char modalias[32];
+ int (*bus_match)(struct device *, const struct device_driver *);
+ void (*device_free)(struct mdio_device *);
+ void (*device_remove)(struct mdio_device *);
+ int addr;
+ int flags;
+ int reset_state;
+ struct gpio_desc *reset_gpio;
+ struct reset_control *reset_ctrl;
+ unsigned int reset_assert_delay;
+ unsigned int reset_deassert_delay;
+};
+
+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,
+};
+
+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_10G_QXGMII = 33,
+ PHY_INTERFACE_MODE_MAX = 34,
+} phy_interface_t;
+
+struct eee_config {
+ u32 tx_lpi_timer;
+ bool tx_lpi_enabled;
+ bool eee_enabled;
+};
+
+struct pse_control;
+
+struct phy_driver;
+
+struct phy_package_shared;
+
+struct phylink;
+
+struct mii_timestamper;
+
+struct phy_device {
+ struct mdio_device mdio;
+ const struct phy_driver *drv;
+ struct device_link *devlink;
+ u32 phyindex;
+ 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;
+ unsigned int default_timestamp: 1;
+ int rate_matching;
+ enum phy_state state;
+ u32 dev_flags;
+ phy_interface_t interface;
+ long unsigned int possible_interfaces[1];
+ int speed;
+ int duplex;
+ int port;
+ int pause;
+ int asym_pause;
+ u8 master_slave_get;
+ u8 master_slave_set;
+ u8 master_slave_state;
+ long unsigned int supported[2];
+ long unsigned int advertising[2];
+ long unsigned int lp_advertising[2];
+ long unsigned int adv_old[2];
+ long unsigned int supported_eee[2];
+ long unsigned int advertising_eee[2];
+ bool eee_enabled;
+ long unsigned int host_interfaces[1];
+ u32 eee_broken_modes;
+ bool enable_tx_lpi;
+ struct eee_config eee_cfg;
+ 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 *);
+};
+
+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 phy_tdr_config {
+ u32 first;
+ u32 last;
+ u32 step;
+ s8 pair;
+};
+
+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,
+};
+
+enum led_brightness {
+ LED_OFF = 0,
+ LED_ON = 1,
+ LED_HALF = 127,
+ LED_FULL = 255,
+};
+
+struct mii_ioctl_data {
+ __u16 phy_id;
+ __u16 reg_num;
+ __u16 val_in;
+ __u16 val_out;
+};
+
+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 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_driver_common {
+ struct device_driver driver;
+ int flags;
+};
+
+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 kernel_hwtstamp_config *, struct netlink_ext_ack *);
+ void (*link_state)(struct mii_timestamper *, struct phy_device *);
+ int (*ts_info)(struct mii_timestamper *, struct kernel_ethtool_ts_info *);
+ struct device *device;
+};
+
+struct phy_package_shared {
+ u8 base_addr;
+ struct device_node *np;
+ refcount_t refcnt;
+ long unsigned int flags;
+ size_t priv_size;
+ void *priv;
+};
+
+struct phy_driver {
+ struct mdio_driver_common mdiodrv;
+ u32 phy_id;
+ char *name;
+ u32 phy_id_mask;
+ const long unsigned int * 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, long unsigned int *, long unsigned int *);
+ int (*led_hw_is_supported)(struct phy_device *, u8, long unsigned int);
+ int (*led_hw_control_set)(struct phy_device *, u8, long unsigned int);
+ int (*led_hw_control_get)(struct phy_device *, u8, long unsigned int *);
+ int (*led_polarity_set)(struct phy_device *, int, long unsigned int);
+};
+
+struct phylink_link_state {
+ long unsigned int advertising[2];
+ long unsigned int 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;
+ long unsigned int 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;
+ long unsigned int 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 link_failed;
+ bool using_mac_select_pcs;
+ struct sfp_bus *sfp_bus;
+ bool sfp_may_have_phy;
+ long unsigned int sfp_interfaces[1];
+ long unsigned int sfp_support[2];
+ u8 sfp_port;
+};
+
+struct phy_setting {
+ u32 speed;
+ u8 duplex;
+ u8 bit;
+};
+
+struct fixed_phy_status {
+ int link;
+ int speed;
+ int duplex;
+ int pause;
+ int asym_pause;
+};
+
+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_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 mac_requires_rxc;
+ bool default_an_inband;
+ void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
+ long unsigned int supported_interfaces[1];
+ long unsigned int mac_capabilities;
+};
+
+struct phylink_mac_ops {
+ long unsigned int (*mac_get_caps)(struct phylink_config *, phy_interface_t);
+ 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);
+};
+
+struct phylink_pcs_ops;
+
+struct phylink_pcs {
+ const struct phylink_pcs_ops *ops;
+ struct phylink *phylink;
+ bool neg_mode;
+ bool poll;
+ bool rxc_always_on;
+};
+
+struct phylink_pcs_ops {
+ int (*pcs_validate)(struct phylink_pcs *, long unsigned int *, 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 long unsigned int *, bool);
+ void (*pcs_an_restart)(struct phylink_pcs *);
+ void (*pcs_link_up)(struct phylink_pcs *, unsigned int, phy_interface_t, int, int);
+ int (*pcs_pre_init)(struct phylink_pcs *);
+};
+
+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 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 phy_device *);
+};
+
+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 firmware {
+ size_t size;
+ const u8 *data;
+ void *priv;
+};
+
+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,
+};
+
+struct mdio_device_id {
+ __u32 phy_id;
+ __u32 phy_id_mask;
+};
+
+enum rgmii_clock_delay {
+ RGMII_CLK_DELAY_0_2_NS = 0,
+ RGMII_CLK_DELAY_0_8_NS = 1,
+ RGMII_CLK_DELAY_1_1_NS = 2,
+ RGMII_CLK_DELAY_1_7_NS = 3,
+ RGMII_CLK_DELAY_2_0_NS = 4,
+ RGMII_CLK_DELAY_2_3_NS = 5,
+ RGMII_CLK_DELAY_2_6_NS = 6,
+ RGMII_CLK_DELAY_3_4_NS = 7,
+};
+
+struct reg_val {
+ u16 reg;
+ u32 val;
+};
+
+struct vsc85xx_hw_stat {
+ const char *string;
+ u8 reg;
+ u16 page;
+ u16 mask;
+};
+
+struct vsc85xx_ptp;
+
+struct vsc8531_private {
+ int rate_magic;
+ u16 supp_led_modes;
+ u32 leds_mode[4];
+ u8 nleds;
+ const struct vsc85xx_hw_stat *hw_stats;
+ u64 *stats;
+ int nstats;
+ u8 addr;
+ unsigned int base_addr;
+ struct mii_timestamper mii_ts;
+ bool input_clk_init;
+ struct vsc85xx_ptp *ptp;
+ struct gpio_desc *load_save;
+ unsigned int ts_base_addr;
+ u8 ts_base_phy;
+ struct mutex ts_lock;
+ struct mutex phc_lock;
+};
+
+enum vsc85xx_global_phy {
+ VSC88XX_BASE_ADDR = 0,
+};
+
+struct vsc8531_edge_rate_table {
+ u32 vddmac;
+ u32 slowdown[8];
+};
+
+enum csr_target {
+ MACRO_CTRL = 7,
+};
+
+struct system_device_crosststamp {
+ ktime_t device;
+ ktime_t sys_realtime;
+ ktime_t sys_monoraw;
+};
+
+struct msix_entry {
+ u32 vector;
+ u16 entry;
+};
+
+struct cyclecounter {
+ u64 (*read)(const struct cyclecounter *);
+ u64 mask;
+ u32 mult;
+ u32 shift;
+};
+
+struct timecounter {
+ const struct cyclecounter *cc;
+ u64 cycle_last;
+ u64 nsec;
+ u64 mask;
+ u64 frac;
+};
+
+struct hwtstamp_config {
+ int flags;
+ int tx_type;
+ int rx_filter;
+};
+
+struct ptp_clock_time {
+ __s64 sec;
+ __u32 nsec;
+ __u32 reserved;
+};
+
+struct ptp_extts_request {
+ unsigned int index;
+ unsigned int flags;
+ unsigned int rsv[2];
+};
+
+struct ptp_perout_request {
+ union {
+ struct ptp_clock_time start;
+ struct ptp_clock_time phase;
+ };
+ struct ptp_clock_time period;
+ unsigned int index;
+ unsigned int flags;
+ union {
+ struct ptp_clock_time on;
+ unsigned int rsv[4];
+ };
+};
+
+enum ptp_pin_function {
+ PTP_PF_NONE = 0,
+ PTP_PF_EXTTS = 1,
+ PTP_PF_PEROUT = 2,
+ PTP_PF_PHYSYNC = 3,
+};
+
+struct ptp_pin_desc {
+ char name[64];
+ unsigned int index;
+ unsigned int func;
+ unsigned int chan;
+ unsigned int rsv[5];
+};
+
+struct ptp_clock_request {
+ enum {
+ PTP_CLK_REQ_EXTTS = 0,
+ PTP_CLK_REQ_PEROUT = 1,
+ PTP_CLK_REQ_PPS = 2,
+ } type;
+ union {
+ struct ptp_extts_request extts;
+ struct ptp_perout_request perout;
+ };
+};
+
+struct ptp_system_timestamp {
+ struct timespec64 pre_ts;
+ struct timespec64 post_ts;
+ clockid_t clockid;
+};
+
+struct ptp_clock_info {
+ struct module *owner;
+ char name[32];
+ s32 max_adj;
+ int n_alarm;
+ int n_ext_ts;
+ int n_per_out;
+ int n_pins;
+ int pps;
+ struct ptp_pin_desc *pin_config;
+ int (*adjfine)(struct ptp_clock_info *, long int);
+ int (*adjphase)(struct ptp_clock_info *, s32);
+ s32 (*getmaxphase)(struct ptp_clock_info *);
+ int (*adjtime)(struct ptp_clock_info *, s64);
+ int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
+ int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+ int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
+ int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
+ int (*getcycles64)(struct ptp_clock_info *, struct timespec64 *);
+ int (*getcyclesx64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+ int (*getcrosscycles)(struct ptp_clock_info *, struct system_device_crosststamp *);
+ int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
+ int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
+ long int (*do_aux_work)(struct ptp_clock_info *);
+};
+
+struct pm_qos_request {
+ struct plist_node node;
+ struct pm_qos_constraints *qos;
+};
+
+enum e1000_mac_type {
+ e1000_82571 = 0,
+ e1000_82572 = 1,
+ e1000_82573 = 2,
+ e1000_82574 = 3,
+ e1000_82583 = 4,
+ e1000_80003es2lan = 5,
+ e1000_ich8lan = 6,
+ e1000_ich9lan = 7,
+ e1000_ich10lan = 8,
+ e1000_pchlan = 9,
+ e1000_pch2lan = 10,
+ e1000_pch_lpt = 11,
+ e1000_pch_spt = 12,
+ e1000_pch_cnp = 13,
+ e1000_pch_tgp = 14,
+ e1000_pch_adp = 15,
+ e1000_pch_mtp = 16,
+ e1000_pch_lnp = 17,
+ e1000_pch_ptp = 18,
+ e1000_pch_nvp = 19,
+};
+
+enum e1000_media_type {
+ e1000_media_type_unknown = 0,
+ e1000_media_type_copper = 1,
+ e1000_media_type_fiber = 2,
+ e1000_media_type_internal_serdes = 3,
+ e1000_num_media_types = 4,
+};
+
+enum e1000_nvm_type {
+ e1000_nvm_unknown = 0,
+ e1000_nvm_none = 1,
+ e1000_nvm_eeprom_spi = 2,
+ e1000_nvm_flash_hw = 3,
+ e1000_nvm_flash_sw = 4,
+};
+
+enum e1000_nvm_override {
+ e1000_nvm_override_none = 0,
+ e1000_nvm_override_spi_small = 1,
+ e1000_nvm_override_spi_large = 2,
+};
+
+enum e1000_phy_type {
+ e1000_phy_unknown = 0,
+ e1000_phy_none = 1,
+ e1000_phy_m88 = 2,
+ e1000_phy_igp = 3,
+ e1000_phy_igp_2 = 4,
+ e1000_phy_gg82563 = 5,
+ e1000_phy_igp_3 = 6,
+ e1000_phy_ife = 7,
+ e1000_phy_bm = 8,
+ e1000_phy_82578 = 9,
+ e1000_phy_82577 = 10,
+ e1000_phy_82579 = 11,
+ e1000_phy_i217 = 12,
+};
+
+enum e1000_bus_width {
+ e1000_bus_width_unknown = 0,
+ e1000_bus_width_pcie_x1 = 1,
+ e1000_bus_width_pcie_x2 = 2,
+ e1000_bus_width_pcie_x4 = 4,
+ e1000_bus_width_pcie_x8 = 8,
+ e1000_bus_width_32 = 9,
+ e1000_bus_width_64 = 10,
+ e1000_bus_width_reserved = 11,
+};
+
+enum e1000_1000t_rx_status {
+ e1000_1000t_rx_status_not_ok = 0,
+ e1000_1000t_rx_status_ok = 1,
+ e1000_1000t_rx_status_undefined = 255,
+};
+
+enum e1000_rev_polarity {
+ e1000_rev_polarity_normal = 0,
+ e1000_rev_polarity_reversed = 1,
+ e1000_rev_polarity_undefined = 255,
+};
+
+enum e1000_fc_mode {
+ e1000_fc_none = 0,
+ e1000_fc_rx_pause = 1,
+ e1000_fc_tx_pause = 2,
+ e1000_fc_full = 3,
+ e1000_fc_default = 255,
+};
+
+enum e1000_ms_type {
+ e1000_ms_hw_default = 0,
+ e1000_ms_force_master = 1,
+ e1000_ms_force_slave = 2,
+ e1000_ms_auto = 3,
+};
+
+enum e1000_smart_speed {
+ e1000_smart_speed_default = 0,
+ e1000_smart_speed_on = 1,
+ e1000_smart_speed_off = 2,
+};
+
+enum e1000_serdes_link_state {
+ e1000_serdes_link_down = 0,
+ e1000_serdes_link_autoneg_progress = 1,
+ e1000_serdes_link_autoneg_complete = 2,
+ e1000_serdes_link_forced_up = 3,
+};
+
+struct e1000_hw_stats {
+ u64 crcerrs;
+ u64 algnerrc;
+ u64 symerrs;
+ u64 rxerrc;
+ u64 mpc;
+ u64 scc;
+ u64 ecol;
+ u64 mcc;
+ u64 latecol;
+ u64 colc;
+ u64 dc;
+ u64 tncrs;
+ u64 sec;
+ u64 cexterr;
+ u64 rlec;
+ u64 xonrxc;
+ u64 xontxc;
+ u64 xoffrxc;
+ u64 xofftxc;
+ u64 fcruc;
+ u64 prc64;
+ u64 prc127;
+ u64 prc255;
+ u64 prc511;
+ u64 prc1023;
+ u64 prc1522;
+ u64 gprc;
+ u64 bprc;
+ u64 mprc;
+ u64 gptc;
+ u64 gorc;
+ u64 gotc;
+ u64 rnbc;
+ u64 ruc;
+ u64 rfc;
+ u64 roc;
+ u64 rjc;
+ u64 mgprc;
+ u64 mgpdc;
+ u64 mgptc;
+ u64 tor;
+ u64 tot;
+ u64 tpr;
+ u64 tpt;
+ u64 ptc64;
+ u64 ptc127;
+ u64 ptc255;
+ u64 ptc511;
+ u64 ptc1023;
+ u64 ptc1522;
+ u64 mptc;
+ u64 bptc;
+ u64 tsctc;
+ u64 tsctfc;
+ u64 iac;
+ u64 icrxptc;
+ u64 icrxatc;
+ u64 ictxptc;
+ u64 ictxatc;
+ u64 ictxqec;
+ u64 ictxqmtc;
+ u64 icrxdmtc;
+ u64 icrxoc;
+};
+
+struct e1000_phy_stats {
+ u32 idle_errors;
+ u32 receive_errors;
+};
+
+struct e1000_host_mng_dhcp_cookie {
+ u32 signature;
+ u8 status;
+ u8 reserved0;
+ u16 vlan_id;
+ u32 reserved1;
+ u16 reserved2;
+ u8 reserved3;
+ u8 checksum;
+};
+
+struct e1000_hw;
+
+struct e1000_mac_operations {
+ s32 (*id_led_init)(struct e1000_hw *);
+ s32 (*blink_led)(struct e1000_hw *);
+ bool (*check_mng_mode)(struct e1000_hw *);
+ s32 (*check_for_link)(struct e1000_hw *);
+ s32 (*cleanup_led)(struct e1000_hw *);
+ void (*clear_hw_cntrs)(struct e1000_hw *);
+ void (*clear_vfta)(struct e1000_hw *);
+ s32 (*get_bus_info)(struct e1000_hw *);
+ void (*set_lan_id)(struct e1000_hw *);
+ s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *);
+ s32 (*led_on)(struct e1000_hw *);
+ s32 (*led_off)(struct e1000_hw *);
+ void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32);
+ s32 (*reset_hw)(struct e1000_hw *);
+ s32 (*init_hw)(struct e1000_hw *);
+ s32 (*setup_link)(struct e1000_hw *);
+ s32 (*setup_physical_interface)(struct e1000_hw *);
+ s32 (*setup_led)(struct e1000_hw *);
+ void (*write_vfta)(struct e1000_hw *, u32, u32);
+ void (*config_collision_dist)(struct e1000_hw *);
+ int (*rar_set)(struct e1000_hw *, u8 *, u32);
+ s32 (*read_mac_addr)(struct e1000_hw *);
+ u32 (*rar_get_count)(struct e1000_hw *);
+};
+
+struct e1000_mac_info {
+ struct e1000_mac_operations ops;
+ u8 addr[6];
+ u8 perm_addr[6];
+ enum e1000_mac_type type;
+ u32 collision_delta;
+ u32 ledctl_default;
+ u32 ledctl_mode1;
+ u32 ledctl_mode2;
+ u32 mc_filter_type;
+ u32 tx_packet_delta;
+ u32 txcw;
+ u16 current_ifs_val;
+ u16 ifs_max_val;
+ u16 ifs_min_val;
+ u16 ifs_ratio;
+ u16 ifs_step_size;
+ u16 mta_reg_count;
+ u32 mta_shadow[128];
+ u16 rar_entry_count;
+ u8 forced_speed_duplex;
+ bool adaptive_ifs;
+ bool has_fwsm;
+ bool arc_subsystem_valid;
+ bool autoneg;
+ bool autoneg_failed;
+ bool get_link_status;
+ bool in_ifs_mode;
+ bool serdes_has_link;
+ bool tx_pkt_filtering;
+ enum e1000_serdes_link_state serdes_link_state;
+};
+
+struct e1000_fc_info {
+ u32 high_water;
+ u32 low_water;
+ u16 pause_time;
+ u16 refresh_time;
+ bool send_xon;
+ bool strict_ieee;
+ enum e1000_fc_mode current_mode;
+ enum e1000_fc_mode requested_mode;
+};
+
+struct e1000_phy_operations {
+ s32 (*acquire)(struct e1000_hw *);
+ s32 (*cfg_on_link_up)(struct e1000_hw *);
+ s32 (*check_polarity)(struct e1000_hw *);
+ s32 (*check_reset_block)(struct e1000_hw *);
+ s32 (*commit)(struct e1000_hw *);
+ s32 (*force_speed_duplex)(struct e1000_hw *);
+ s32 (*get_cfg_done)(struct e1000_hw *);
+ s32 (*get_cable_length)(struct e1000_hw *);
+ s32 (*get_info)(struct e1000_hw *);
+ s32 (*set_page)(struct e1000_hw *, u16);
+ s32 (*read_reg)(struct e1000_hw *, u32, u16 *);
+ s32 (*read_reg_locked)(struct e1000_hw *, u32, u16 *);
+ s32 (*read_reg_page)(struct e1000_hw *, u32, u16 *);
+ void (*release)(struct e1000_hw *);
+ s32 (*reset)(struct e1000_hw *);
+ s32 (*set_d0_lplu_state)(struct e1000_hw *, bool);
+ s32 (*set_d3_lplu_state)(struct e1000_hw *, bool);
+ s32 (*write_reg)(struct e1000_hw *, u32, u16);
+ s32 (*write_reg_locked)(struct e1000_hw *, u32, u16);
+ s32 (*write_reg_page)(struct e1000_hw *, u32, u16);
+ void (*power_up)(struct e1000_hw *);
+ void (*power_down)(struct e1000_hw *);
+};
+
+struct e1000_phy_info {
+ struct e1000_phy_operations ops;
+ enum e1000_phy_type type;
+ enum e1000_1000t_rx_status local_rx;
+ enum e1000_1000t_rx_status remote_rx;
+ enum e1000_ms_type ms_type;
+ enum e1000_ms_type original_ms_type;
+ enum e1000_rev_polarity cable_polarity;
+ enum e1000_smart_speed smart_speed;
+ u32 addr;
+ u32 id;
+ u32 reset_delay_us;
+ u32 revision;
+ u32 retry_count;
+ enum e1000_media_type media_type;
+ u16 autoneg_advertised;
+ u16 autoneg_mask;
+ u16 cable_length;
+ u16 max_cable_length;
+ u16 min_cable_length;
+ u8 mdix;
+ bool disable_polarity_correction;
+ bool is_mdix;
+ bool polarity_correction;
+ bool speed_downgraded;
+ bool autoneg_wait_to_complete;
+ bool retry_enabled;
+};
+
+struct e1000_nvm_operations {
+ s32 (*acquire)(struct e1000_hw *);
+ s32 (*read)(struct e1000_hw *, u16, u16, u16 *);
+ void (*release)(struct e1000_hw *);
+ void (*reload)(struct e1000_hw *);
+ s32 (*update)(struct e1000_hw *);
+ s32 (*valid_led_default)(struct e1000_hw *, u16 *);
+ s32 (*validate)(struct e1000_hw *);
+ s32 (*write)(struct e1000_hw *, u16, u16, u16 *);
+};
+
+struct e1000_nvm_info {
+ struct e1000_nvm_operations ops;
+ enum e1000_nvm_type type;
+ enum e1000_nvm_override override;
+ u32 flash_bank_size;
+ u32 flash_base_addr;
+ u16 word_size;
+ u16 delay_usec;
+ u16 address_bits;
+ u16 opcode_bits;
+ u16 page_size;
+};
+
+struct e1000_bus_info {
+ enum e1000_bus_width width;
+ u16 func;
+};
+
+struct e1000_dev_spec_82571 {
+ bool laa_is_present;
+ u32 smb_counter;
+};
+
+struct e1000_dev_spec_80003es2lan {
+ bool mdic_wa_enable;
+};
+
+struct e1000_shadow_ram {
+ u16 value;
+ bool modified;
+};
+
+enum e1000_ulp_state {
+ e1000_ulp_state_unknown = 0,
+ e1000_ulp_state_off = 1,
+ e1000_ulp_state_on = 2,
+};
+
+struct e1000_dev_spec_ich8lan {
+ bool kmrn_lock_loss_workaround_enabled;
+ struct e1000_shadow_ram shadow_ram[2048];
+ bool nvm_k1_enabled;
+ bool eee_disable;
+ u16 eee_lp_ability;
+ enum e1000_ulp_state ulp_state;
+};
+
+struct e1000_adapter;
+
+struct e1000_hw {
+ struct e1000_adapter *adapter;
+ void *hw_addr;
+ void *flash_address;
+ struct e1000_mac_info mac;
+ struct e1000_fc_info fc;
+ struct e1000_phy_info phy;
+ struct e1000_nvm_info nvm;
+ struct e1000_bus_info bus;
+ struct e1000_host_mng_dhcp_cookie mng_cookie;
+ union {
+ struct e1000_dev_spec_82571 e82571;
+ struct e1000_dev_spec_80003es2lan e80003es2lan;
+ struct e1000_dev_spec_ich8lan ich8lan;
+ } dev_spec;
+};
+
+struct e1000_phy_regs {
+ u16 bmcr;
+ u16 bmsr;
+ u16 advertise;
+ u16 lpa;
+ u16 expansion;
+ u16 ctrl1000;
+ u16 stat1000;
+ u16 estatus;
+};
+
+struct e1000_buffer;
+
+struct e1000_ring {
+ struct e1000_adapter *adapter;
+ void *desc;
+ dma_addr_t dma;
+ unsigned int size;
+ unsigned int count;
+ u16 next_to_use;
+ u16 next_to_clean;
+ void *head;
+ void *tail;
+ struct e1000_buffer *buffer_info;
+ char name[21];
+ u32 ims_val;
+ u32 itr_val;
+ void *itr_register;
+ int set_itr;
+ struct sk_buff *rx_skb_top;
+};
+
+struct ptp_clock;
+
+struct e1000_info;
+
+struct e1000_adapter {
+ struct timer_list watchdog_timer;
+ struct timer_list phy_info_timer;
+ struct timer_list blink_timer;
+ struct work_struct reset_task;
+ struct work_struct watchdog_task;
+ const struct e1000_info *ei;
+ long unsigned int active_vlans[64];
+ u32 bd_number;
+ u32 rx_buffer_len;
+ u16 mng_vlan_id;
+ u16 link_speed;
+ u16 link_duplex;
+ u16 eeprom_vers;
+ long unsigned int state;
+ u32 itr;
+ u32 itr_setting;
+ u16 tx_itr;
+ u16 rx_itr;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct e1000_ring *tx_ring;
+ u32 tx_fifo_limit;
+ struct napi_struct napi;
+ unsigned int uncorr_errors;
+ unsigned int corr_errors;
+ unsigned int restart_queue;
+ u32 txd_cmd;
+ bool detect_tx_hung;
+ bool tx_hang_recheck;
+ u8 tx_timeout_factor;
+ u32 tx_int_delay;
+ u32 tx_abs_int_delay;
+ unsigned int total_tx_bytes;
+ unsigned int total_tx_packets;
+ unsigned int total_rx_bytes;
+ unsigned int total_rx_packets;
+ u64 tpt_old;
+ u64 colc_old;
+ u32 gotc;
+ u64 gotc_old;
+ u32 tx_timeout_count;
+ u32 tx_fifo_head;
+ u32 tx_head_addr;
+ u32 tx_fifo_size;
+ u32 tx_dma_failed;
+ u32 tx_hwtstamp_timeouts;
+ u32 tx_hwtstamp_skipped;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ bool (*clean_rx)(struct e1000_ring *, int *, int);
+ void (*alloc_rx_buf)(struct e1000_ring *, int, gfp_t);
+ struct e1000_ring *rx_ring;
+ u32 rx_int_delay;
+ u32 rx_abs_int_delay;
+ u64 hw_csum_err;
+ u64 hw_csum_good;
+ u64 rx_hdr_split;
+ u32 gorc;
+ u64 gorc_old;
+ u32 alloc_rx_buff_failed;
+ u32 rx_dma_failed;
+ u32 rx_hwtstamp_cleared;
+ unsigned int rx_ps_pages;
+ u16 rx_ps_bsize0;
+ u32 max_frame_size;
+ u32 min_frame_size;
+ struct net_device *netdev;
+ struct pci_dev *pdev;
+ struct e1000_hw hw;
+ spinlock_t stats64_lock;
+ struct e1000_hw_stats stats;
+ struct e1000_phy_info phy_info;
+ struct e1000_phy_stats phy_stats;
+ struct e1000_phy_regs phy_regs;
+ struct e1000_ring test_tx_ring;
+ struct e1000_ring test_rx_ring;
+ u32 test_icr;
+ u32 msg_enable;
+ unsigned int num_vectors;
+ struct msix_entry *msix_entries;
+ int int_mode;
+ u32 eiac_mask;
+ u32 eeprom_wol;
+ u32 wol;
+ u32 pba;
+ u32 max_hw_frame_size;
+ bool fc_autoneg;
+ unsigned int flags;
+ unsigned int flags2;
+ struct work_struct downshift_task;
+ struct work_struct update_phy_task;
+ struct work_struct print_hang_task;
+ int phy_hang_count;
+ u16 tx_ring_count;
+ u16 rx_ring_count;
+ struct hwtstamp_config hwtstamp_config;
+ struct delayed_work systim_overflow_work;
+ struct sk_buff *tx_hwtstamp_skb;
+ long unsigned int tx_hwtstamp_start;
+ struct work_struct tx_hwtstamp_work;
+ spinlock_t systim_lock;
+ struct cyclecounter cc;
+ struct timecounter tc;
+ struct ptp_clock *ptp_clock;
+ struct ptp_clock_info ptp_clock_info;
+ struct pm_qos_request pm_qos_req;
+ long int ptp_delta;
+ u16 eee_advert;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct e1000_ps_page {
+ struct page *page;
+ u64 dma;
+};
+
+struct e1000_buffer {
+ dma_addr_t dma;
+ struct sk_buff *skb;
+ union {
+ struct {
+ long unsigned int time_stamp;
+ u16 length;
+ u16 next_to_watch;
+ unsigned int segs;
+ unsigned int bytecount;
+ u16 mapped_as_page;
+ };
+ struct {
+ struct e1000_ps_page *ps_pages;
+ struct page *page;
+ };
+ };
+};
+
+struct e1000_info {
+ enum e1000_mac_type mac;
+ unsigned int flags;
+ unsigned int flags2;
+ u32 pba;
+ u32 max_hw_frame_size;
+ s32 (*get_variants)(struct e1000_adapter *);
+ const struct e1000_mac_operations *mac_ops;
+ const struct e1000_phy_operations *phy_ops;
+ const struct e1000_nvm_operations *nvm_ops;
+};
+
+enum e1000_state_t {
+ __E1000_TESTING = 0,
+ __E1000_RESETTING = 1,
+ __E1000_ACCESS_SHARED_RESOURCE = 2,
+ __E1000_DOWN = 3,
+};
+
+struct ich8_hsfsts {
+ u16 flcdone: 1;
+ u16 flcerr: 1;
+ u16 dael: 1;
+ u16 berasesz: 2;
+ u16 flcinprog: 1;
+ u16 reserved1: 2;
+ u16 reserved2: 6;
+ u16 fldesvalid: 1;
+ u16 flockdn: 1;
+};
+
+union ich8_hws_flash_status {
+ struct ich8_hsfsts hsf_status;
+ u16 regval;
+};
+
+struct ich8_hsflctl {
+ u16 flcgo: 1;
+ u16 flcycle: 2;
+ u16 reserved: 5;
+ u16 fldbcount: 2;
+ u16 flockdn: 6;
+};
+
+union ich8_hws_flash_ctrl {
+ struct ich8_hsflctl hsf_ctrl;
+ u16 regval;
+};
+
+struct ich8_pr {
+ u32 base: 13;
+ u32 reserved1: 2;
+ u32 rpe: 1;
+ u32 limit: 13;
+ u32 reserved2: 2;
+ u32 wpe: 1;
+};
+
+union ich8_flash_protected_range {
+ struct ich8_pr range;
+ u32 regval;
+};
+
+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,
+};
+
+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,
+};
+
+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_OPT_RX_FILTER = 131072,
+ SOF_TIMESTAMPING_LAST = 131072,
+ SOF_TIMESTAMPING_MASK = 262143,
+};
+
+union e1000_rx_desc_extended {
+ struct {
+ __le64 buffer_addr;
+ __le64 reserved;
+ } read;
+ struct {
+ struct {
+ __le32 mrq;
+ union {
+ __le32 rss;
+ struct {
+ __le16 ip_id;
+ __le16 csum;
+ } csum_ip;
+ } hi_dword;
+ } lower;
+ struct {
+ __le32 status_error;
+ __le16 length;
+ __le16 vlan;
+ } upper;
+ } wb;
+};
+
+struct e1000_tx_desc {
+ __le64 buffer_addr;
+ union {
+ __le32 data;
+ struct {
+ __le16 length;
+ u8 cso;
+ u8 cmd;
+ } flags;
+ } lower;
+ union {
+ __le32 data;
+ struct {
+ u8 status;
+ u8 css;
+ __le16 special;
+ } fields;
+ } upper;
+};
+
+enum {
+ NETDEV_STATS = 0,
+ E1000_STATS = 1,
+};
+
+struct e1000_stats {
+ char stat_string[32];
+ int type;
+ int sizeof_stat;
+ int stat_offset;
+};
+
+struct usb_endpoint_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bEndpointAddress;
+ __u8 bmAttributes;
+ __le16 wMaxPacketSize;
+ __u8 bInterval;
+ __u8 bRefresh;
+ __u8 bSynchAddress;
+} __attribute__((packed));
+
+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_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_ssp_rate {
+ USB_SSP_GEN_UNKNOWN = 0,
+ USB_SSP_GEN_2x1 = 1,
+ USB_SSP_GEN_1x2 = 2,
+ USB_SSP_GEN_2x2 = 3,
+};
+
+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,
+};
+
+struct usb_otg_caps {
+ u16 otg_rev;
+ bool hnp_support;
+ bool srp_support;
+ bool adp_support;
+};
+
+enum usb_dr_mode {
+ USB_DR_MODE_UNKNOWN = 0,
+ USB_DR_MODE_HOST = 1,
+ USB_DR_MODE_PERIPHERAL = 2,
+ USB_DR_MODE_OTG = 3,
+};
+
+enum {
+ MEMREMAP_WB = 1,
+ MEMREMAP_WT = 2,
+ MEMREMAP_WC = 4,
+ MEMREMAP_ENC = 8,
+ MEMREMAP_DEC = 16,
+};
+
+struct gen_pool;
+
+typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
+
+struct gen_pool {
+ spinlock_t lock;
+ struct list_head chunks;
+ int min_alloc_order;
+ genpool_algo_t algo;
+ void *data;
+ const char *name;
+};
+
+struct usb_ctrlrequest {
+ __u8 bRequestType;
+ __u8 bRequest;
+ __le16 wValue;
+ __le16 wIndex;
+ __le16 wLength;
+};
+
+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 usb_config_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __le16 wTotalLength;
+ __u8 bNumInterfaces;
+ __u8 bConfigurationValue;
+ __u8 iConfiguration;
+ __u8 bmAttributes;
+ __u8 bMaxPower;
+} __attribute__((packed));
+
+struct usb_interface_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bInterfaceNumber;
+ __u8 bAlternateSetting;
+ __u8 bNumEndpoints;
+ __u8 bInterfaceClass;
+ __u8 bInterfaceSubClass;
+ __u8 bInterfaceProtocol;
+ __u8 iInterface;
+};
+
+struct usb_ssp_isoc_ep_comp_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __le16 wReseved;
+ __le32 dwBytesPerInterval;
+};
+
+struct usb_ss_ep_comp_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bMaxBurst;
+ __u8 bmAttributes;
+ __le16 wBytesPerInterval;
+};
+
+struct usb_interface_assoc_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bFirstInterface;
+ __u8 bInterfaceCount;
+ __u8 bFunctionClass;
+ __u8 bFunctionSubClass;
+ __u8 bFunctionProtocol;
+ __u8 iFunction;
+};
+
+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_ss_container_id_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bDevCapabilityType;
+ __u8 bReserved;
+ __u8 ContainerID[16];
+};
+
+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_ptm_cap_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bDevCapabilityType;
+};
+
+enum usb3_link_state {
+ USB3_LPM_U0 = 0,
+ USB3_LPM_U1 = 1,
+ USB3_LPM_U2 = 2,
+ USB3_LPM_U3 = 3,
+};
+
+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_host_interface {
+ struct usb_interface_descriptor desc;
+ int extralen;
+ unsigned char *extra;
+ struct usb_host_endpoint *endpoint;
+ char *string;
+};
+
+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,
+};
+
+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;
+};
+
+struct usb_interface_cache {
+ unsigned int num_altsetting;
+ struct kref ref;
+ struct usb_host_interface altsetting[0];
+};
+
+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_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;
+};
+
+struct usb_device;
+
+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;
+ long unsigned int devmap[2];
+ 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;
+};
+
+enum usb_link_tunnel_mode {
+ USB_LINK_UNKNOWN = 0,
+ USB_LINK_NATIVE = 1,
+ USB_LINK_TUNNELED = 2,
+};
+
+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_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;
+ short unsigned int 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;
+ long unsigned int active_duration;
+ long unsigned int connect_time;
+ unsigned int do_remote_wakeup: 1;
+ unsigned int reset_resume: 1;
+ unsigned int port_is_suspended: 1;
+ enum usb_link_tunnel_mode tunnel_mode;
+ 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;
+};
+
+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;
+};
+
+struct usb_iso_packet_descriptor {
+ unsigned int offset;
+ unsigned int length;
+ unsigned int actual_length;
+ int status;
+};
+
+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 urb;
+
+typedef void (*usb_complete_t)(struct urb *);
+
+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;
+ struct usb_iso_packet_descriptor iso_frame_desc[0];
+};
+
+enum usb_led_event {
+ USB_LED_EVENT_HOST = 0,
+ USB_LED_EVENT_GADGET = 1,
+};
+
+struct giveback_urb_bh {
+ bool running;
+ bool high_prio;
+ spinlock_t lock;
+ struct list_head head;
+ struct work_struct bh;
+ struct usb_host_endpoint *completing_ep;
+};
+
+enum usb_dev_authorize_policy {
+ USB_DEVICE_AUTHORIZE_NONE = 0,
+ USB_DEVICE_AUTHORIZE_ALL = 1,
+ USB_DEVICE_AUTHORIZE_INTERNAL = 2,
+};
+
+struct hc_driver;
+
+struct usb_phy;
+
+struct usb_phy_roothub;
+
+struct dma_pool;
+
+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;
+ long unsigned int 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;
+ long unsigned int hcd_priv[0];
+};
+
+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);
+ long unsigned int (*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);
+};
+
+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,
+};
+
+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 *);
+};
+
+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));
+
+struct usb_phy_io_ops {
+ int (*read)(struct usb_phy *, u32);
+ int (*write)(struct usb_phy *, u32, u32);
+};
+
+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 *);
+};
+
+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 usb_cdc_header_desc {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bDescriptorSubType;
+ __le16 bcdCDC;
+} __attribute__((packed));
+
+struct usb_cdc_call_mgmt_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bDescriptorSubType;
+ __u8 bmCapabilities;
+ __u8 bDataInterface;
+};
+
+struct usb_cdc_acm_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bDescriptorSubType;
+ __u8 bmCapabilities;
+};
+
+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_network_terminal_desc {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bDescriptorSubType;
+ __u8 bEntityId;
+ __u8 iName;
+ __u8 bChannelIndex;
+ __u8 bPhysicalInterface;
+};
+
+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_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_obex_desc {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bDescriptorSubType;
+ __le16 bcdVersion;
+} __attribute__((packed));
+
+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 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 api_context {
+ struct completion done;
+ int status;
+};
+
+struct set_config_request {
+ struct usb_device *udev;
+ int config;
+ struct work_struct work;
+ struct list_head node;
+};
+
+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 quirk_entry {
+ u16 vid;
+ u16 pid;
+ u32 flags;
+};
+
+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 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;
+};
+
+enum ehci_rh_state {
+ EHCI_RH_HALTED = 0,
+ EHCI_RH_SUSPENDED = 1,
+ EHCI_RH_RUNNING = 2,
+ EHCI_RH_STOPPING = 3,
+};
+
+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,
+};
+
+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;
+ long unsigned int reset_done[15];
+ long unsigned int bus_suspended;
+ long unsigned int companion_ports;
+ long unsigned int owned_ports;
+ long unsigned int port_c_suspend;
+ long unsigned int suspended_ports;
+ long unsigned int 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;
+ long unsigned int 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;
+ long unsigned int 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_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_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_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_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_fstn {
+ __le32 hw_next;
+ __le32 hw_prev;
+ dma_addr_t fstn_dma;
+ union ehci_shadow fstn_next;
+ long: 64;
+};
+
+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_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_driver_overrides {
+ size_t extra_priv_size;
+ int (*reset)(struct usb_hcd *);
+ int (*port_power)(struct usb_hcd *, int, bool);
+};
+
+struct va_format {
+ const char *fmt;
+ va_list *va;
+};
+
+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 *);
+ void (*shutdown)(struct usb_interface *);
+ const struct usb_device_id *id_table;
+ const struct attribute_group **dev_groups;
+ struct usb_dynids dynids;
+ struct device_driver driver;
+ unsigned int no_dynamic_id: 1;
+ unsigned int supports_autosuspend: 1;
+ unsigned int disable_hub_initiated_lpm: 1;
+ unsigned int soft_unbind: 1;
+};
+
+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_container_ctx {
+ unsigned int type;
+ int size;
+ u8 *bytes;
+ dma_addr_t dma;
+};
+
+struct xhci_slot_ctx {
+ __le32 dev_info;
+ __le32 dev_info2;
+ __le32 tt_info;
+ __le32 dev_state;
+ __le32 reserved[4];
+};
+
+struct xhci_ep_ctx {
+ __le32 ep_info;
+ __le32 ep_info2;
+ __le64 deq;
+ __le32 tx_info;
+ __le32 reserved[3];
+};
+
+struct xhci_input_control_ctx {
+ __le32 drop_flags;
+ __le32 add_flags;
+ __le32 rsvd2[6];
+};
+
+union xhci_trb;
+
+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;
+};
+
+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_stream_ctx {
+ __le64 stream_ring;
+ __le32 reserved[2];
+};
+
+struct xhci_ring;
+
+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;
+};
+
+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,
+};
+
+struct xhci_segment;
+
+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;
+};
+
+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_virt_device;
+
+struct xhci_hcd;
+
+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_port;
+
+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];
+ struct xhci_port *rhub_port;
+ struct xhci_interval_bw_table *bw_table;
+ struct xhci_tt_bw_info *tt_info;
+ long unsigned int flags;
+ u16 current_mel;
+ void *debugfs_private;
+};
+
+struct s3_save {
+ u32 command;
+ u32 dev_nt;
+ u64 dcbaa_ptr;
+ u32 config_reg;
+};
+
+struct xhci_bus_state {
+ long unsigned int bus_suspended;
+ long unsigned int next_statechange;
+ u32 port_c_suspend;
+ u32 suspended_ports;
+ u32 port_remote_wakeup;
+ long unsigned int resuming_ports;
+};
+
+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_device_context_array;
+
+struct xhci_interrupter;
+
+struct xhci_scratchpad;
+
+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;
+ u16 hci_version;
+ u16 max_interrupters;
+ u32 imod_interval;
+ int page_size;
+ int page_shift;
+ int nvecs;
+ 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;
+ long unsigned int run_graceperiod;
+ struct s3_save s3;
+ long long unsigned int 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;
+ 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;
+ long unsigned int priv[0];
+};
+
+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;
+};
+
+enum xhci_overhead_type {
+ LS_OVERHEAD_TYPE = 0,
+ FS_OVERHEAD_TYPE = 1,
+ HS_OVERHEAD_TYPE = 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_port {
+ __le32 *addr;
+ int hw_portnum;
+ int hcd_portnum;
+ struct xhci_hub *rhub;
+ struct xhci_port_cap *port_cap;
+ unsigned int lpm_incapable: 1;
+ long unsigned int resume_timestamp;
+ bool rexit_active;
+ int slot_id;
+ struct completion rexit_done;
+ struct completion u3exit_done;
+};
+
+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_device_context_array {
+ __le64 dev_context_ptrs[256];
+ dma_addr_t dma;
+};
+
+enum xhci_setup_dev {
+ SETUP_CONTEXT_ONLY = 0,
+ SETUP_CONTEXT_ADDRESS = 1,
+};
+
+enum xhci_cancelled_td_status {
+ TD_DIRTY = 0,
+ TD_HALTED = 1,
+ TD_CLEARING_CACHE = 2,
+ TD_CLEARING_CACHE_DEFERRED = 3,
+ TD_CLEARED = 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;
+};
+
+struct xhci_erst_entry {
+ __le64 seg_addr;
+ __le32 seg_size;
+ __le32 rsvd;
+};
+
+struct xhci_erst {
+ struct xhci_erst_entry *entries;
+ unsigned int num_entries;
+ dma_addr_t erst_dma_addr;
+};
+
+struct xhci_scratchpad {
+ u64 *sp_array;
+ dma_addr_t sp_dma;
+ void **sp_buffers;
+};
+
+struct urb_priv {
+ int num_tds;
+ int num_tds_done;
+ struct xhci_td td[0];
+};
+
+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;
+ 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_port_cap {
+ u32 *psi;
+ u8 psi_count;
+ u8 psi_uid_count;
+ u8 maj_rev;
+ u8 min_rev;
+ u32 protocol_caps;
+};
+
+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);
+};
+
+typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_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,
+};
+
+struct ignore_entry {
+ u16 vid;
+ u16 pid;
+ u16 bcdmin;
+ u16 bcdmax;
+};
+
+struct input_id {
+ __u16 bustype;
+ __u16 vendor;
+ __u16 product;
+ __u16 version;
+};
+
+struct input_absinfo {
+ __s32 value;
+ __s32 minimum;
+ __s32 maximum;
+ __s32 fuzz;
+ __s32 flat;
+ __s32 resolution;
+};
+
+struct input_keymap_entry {
+ __u8 flags;
+ __u8 len;
+ __u16 index;
+ __u32 keycode;
+ __u8 scancode[32];
+};
+
+struct ff_replay {
+ __u16 length;
+ __u16 delay;
+};
+
+struct ff_trigger {
+ __u16 button;
+ __u16 interval;
+};
+
+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_condition_effect {
+ __u16 right_saturation;
+ __u16 left_saturation;
+ __s16 right_coeff;
+ __s16 left_coeff;
+ __u16 deadband;
+ __s16 center;
+};
+
+struct ff_periodic_effect {
+ __u16 waveform;
+ __u16 period;
+ __s16 magnitude;
+ __s16 offset;
+ __u16 phase;
+ struct ff_envelope envelope;
+ __u32 custom_len;
+ __s16 *custom_data;
+};
+
+struct ff_rumble_effect {
+ __u16 strong_magnitude;
+ __u16 weak_magnitude;
+};
+
+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_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 input_value {
+ __u16 type;
+ __u16 code;
+ __s32 value;
+};
+
+enum input_clock_type {
+ INPUT_CLK_REAL = 0,
+ INPUT_CLK_MONO = 1,
+ INPUT_CLK_BOOT = 2,
+ INPUT_CLK_MAX = 3,
+};
+
+struct ff_device;
+
+struct input_dev_poller;
+
+struct input_mt;
+
+struct input_handle;
+
+struct input_dev {
+ const char *name;
+ const char *phys;
+ const char *uniq;
+ struct input_id id;
+ long unsigned int propbit[1];
+ long unsigned int evbit[1];
+ long unsigned int keybit[12];
+ long unsigned int relbit[1];
+ long unsigned int absbit[1];
+ long unsigned int mscbit[1];
+ long unsigned int ledbit[1];
+ long unsigned int sndbit[1];
+ long unsigned int ffbit[2];
+ long unsigned int 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;
+ long unsigned int key[12];
+ long unsigned int led[1];
+ long unsigned int snd[1];
+ long unsigned int 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 *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;
+};
+
+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;
+ long unsigned int ffbit[2];
+ struct mutex mutex;
+ int max_effects;
+ struct ff_effect *effects;
+ struct file *effect_owners[0];
+};
+
+struct input_handler;
+
+struct input_handle {
+ void *private;
+ int open;
+ const char *name;
+ struct input_dev *dev;
+ struct input_handler *handler;
+ unsigned int (*handle_events)(struct input_handle *, struct input_value *, unsigned int);
+ struct list_head d_node;
+ struct list_head h_node;
+};
+
+struct input_handler {
+ void *private;
+ void (*event)(struct input_handle *, unsigned int, unsigned int, int);
+ unsigned int (*events)(struct input_handle *, 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;
+};
+
+struct mousedev_hw_data {
+ int dx;
+ int dy;
+ int dz;
+ int x;
+ int y;
+ int abs_event;
+ long unsigned int buttons;
+};
+
+struct mousedev {
+ int open;
+ struct input_handle handle;
+ wait_queue_head_t wait;
+ struct list_head client_list;
+ spinlock_t client_lock;
+ struct mutex mutex;
+ struct device dev;
+ struct cdev cdev;
+ bool exist;
+ struct list_head mixdev_node;
+ bool opened_by_mixdev;
+ struct mousedev_hw_data packet;
+ unsigned int pkt_count;
+ int old_x[4];
+ int old_y[4];
+ int frac_dx;
+ int frac_dy;
+ long unsigned int touch;
+ int (*open_device)(struct mousedev *);
+ void (*close_device)(struct mousedev *);
+};
+
+enum mousedev_emul {
+ MOUSEDEV_EMUL_PS2 = 0,
+ MOUSEDEV_EMUL_IMPS = 1,
+ MOUSEDEV_EMUL_EXPS = 2,
+};
+
+struct mousedev_motion {
+ int dx;
+ int dy;
+ int dz;
+ long unsigned int buttons;
+};
+
+struct mousedev_client {
+ struct fasync_struct *fasync;
+ struct mousedev *mousedev;
+ struct list_head node;
+ struct mousedev_motion packets[16];
+ unsigned int head;
+ unsigned int tail;
+ spinlock_t packet_lock;
+ int pos_x;
+ int pos_y;
+ u8 ps2[6];
+ unsigned char ready;
+ unsigned char buffer;
+ unsigned char bufsiz;
+ unsigned char imexseq;
+ unsigned char impsseq;
+ enum mousedev_emul mode;
+ long unsigned int last_buttons;
+};
+
+enum {
+ FRACTION_DENOM = 128,
+};
+
+struct serio_device_id {
+ __u8 type;
+ __u8 extra;
+ __u8 id;
+ __u8 proto;
+};
+
+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];
+};
+
+struct input_mt_pos {
+ s16 x;
+ s16 y;
+};
+
+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;
+};
+
+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;
+};
+
+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;
+ long unsigned int flags;
+ u8 cmdbuf[8];
+ u8 cmdcnt;
+ u8 nak;
+ ps2_pre_receive_handler_t pre_receive_handler;
+ ps2_receive_handler_t receive_handler;
+};
+
+enum psmouse_state {
+ PSMOUSE_IGNORE = 0,
+ PSMOUSE_INITIALIZING = 1,
+ PSMOUSE_RESYNCING = 2,
+ PSMOUSE_CMD_MODE = 3,
+ PSMOUSE_ACTIVATED = 4,
+};
+
+typedef enum {
+ PSMOUSE_BAD_DATA = 0,
+ PSMOUSE_GOOD_DATA = 1,
+ PSMOUSE_FULL_PACKET = 2,
+} psmouse_ret_t;
+
+enum psmouse_scale {
+ PSMOUSE_SCALE11 = 0,
+ PSMOUSE_SCALE21 = 1,
+};
+
+enum psmouse_type {
+ PSMOUSE_NONE = 0,
+ PSMOUSE_PS2 = 1,
+ PSMOUSE_PS2PP = 2,
+ PSMOUSE_THINKPS = 3,
+ PSMOUSE_GENPS = 4,
+ PSMOUSE_IMPS = 5,
+ PSMOUSE_IMEX = 6,
+ PSMOUSE_SYNAPTICS = 7,
+ PSMOUSE_ALPS = 8,
+ PSMOUSE_LIFEBOOK = 9,
+ PSMOUSE_TRACKPOINT = 10,
+ PSMOUSE_TOUCHKIT_PS2 = 11,
+ PSMOUSE_CORTRON = 12,
+ PSMOUSE_HGPK = 13,
+ PSMOUSE_ELANTECH = 14,
+ PSMOUSE_FSP = 15,
+ PSMOUSE_SYNAPTICS_RELATIVE = 16,
+ PSMOUSE_CYPRESS = 17,
+ PSMOUSE_FOCALTECH = 18,
+ PSMOUSE_VMMOUSE = 19,
+ PSMOUSE_BYD = 20,
+ PSMOUSE_SYNAPTICS_SMBUS = 21,
+ PSMOUSE_ELANTECH_SMBUS = 22,
+ PSMOUSE_AUTO = 23,
+};
+
+struct psmouse;
+
+struct psmouse_protocol {
+ enum psmouse_type type;
+ bool maxproto;
+ bool ignore_parity;
+ bool try_passthru;
+ bool smbus_companion;
+ const char *name;
+ const char *alias;
+ int (*detect)(struct psmouse *, bool);
+ int (*init)(struct psmouse *);
+};
+
+struct psmouse {
+ void *private;
+ struct input_dev *dev;
+ struct ps2dev ps2dev;
+ struct delayed_work resync_work;
+ const char *vendor;
+ const char *name;
+ const struct psmouse_protocol *protocol;
+ unsigned char packet[8];
+ unsigned char badbyte;
+ unsigned char pktcnt;
+ unsigned char pktsize;
+ unsigned char oob_data_type;
+ unsigned char extra_buttons;
+ bool acks_disable_command;
+ unsigned int model;
+ long unsigned int last;
+ long unsigned int out_of_sync_cnt;
+ long unsigned int num_resyncs;
+ enum psmouse_state state;
+ char devname[64];
+ char phys[32];
+ unsigned int rate;
+ unsigned int resolution;
+ unsigned int resetafter;
+ unsigned int resync_time;
+ bool smartscroll;
+ psmouse_ret_t (*protocol_handler)(struct psmouse *);
+ void (*set_rate)(struct psmouse *, unsigned int);
+ void (*set_resolution)(struct psmouse *, unsigned int);
+ void (*set_scale)(struct psmouse *, enum psmouse_scale);
+ int (*reconnect)(struct psmouse *);
+ int (*fast_reconnect)(struct psmouse *);
+ void (*disconnect)(struct psmouse *);
+ void (*cleanup)(struct psmouse *);
+ int (*poll)(struct psmouse *);
+ void (*pt_activate)(struct psmouse *);
+ void (*pt_deactivate)(struct psmouse *);
+};
+
+enum SS4_PACKET_ID {
+ SS4_PACKET_ID_IDLE = 0,
+ SS4_PACKET_ID_ONE = 1,
+ SS4_PACKET_ID_TWO = 2,
+ SS4_PACKET_ID_MULTI = 3,
+ SS4_PACKET_ID_STICK = 4,
+};
+
+enum V7_PACKET_ID {
+ V7_PACKET_ID_IDLE = 0,
+ V7_PACKET_ID_TWO = 1,
+ V7_PACKET_ID_MULTI = 2,
+ V7_PACKET_ID_NEW = 3,
+ V7_PACKET_ID_UNKNOWN = 4,
+};
+
+struct alps_protocol_info {
+ u16 version;
+ u8 byte0;
+ u8 mask0;
+ unsigned int flags;
+};
+
+struct alps_model_info {
+ u8 signature[3];
+ struct alps_protocol_info protocol_info;
+};
+
+struct alps_nibble_commands {
+ int command;
+ unsigned char data;
+};
+
+struct alps_bitmap_point {
+ int start_bit;
+ int num_bits;
+};
+
+struct alps_fields {
+ unsigned int x_map;
+ unsigned int y_map;
+ unsigned int fingers;
+ int pressure;
+ struct input_mt_pos st;
+ struct input_mt_pos mt[4];
+ unsigned int first_mp: 1;
+ unsigned int is_mp: 1;
+ unsigned int left: 1;
+ unsigned int right: 1;
+ unsigned int middle: 1;
+ unsigned int ts_left: 1;
+ unsigned int ts_right: 1;
+ unsigned int ts_middle: 1;
+};
+
+struct alps_data {
+ struct psmouse *psmouse;
+ struct input_dev *dev2;
+ struct input_dev *dev3;
+ char phys2[32];
+ char phys3[32];
+ struct delayed_work dev3_register_work;
+ const struct alps_nibble_commands *nibble_commands;
+ int addr_command;
+ u16 proto_version;
+ u8 byte0;
+ u8 mask0;
+ u8 dev_id[3];
+ u8 fw_ver[3];
+ int flags;
+ int x_max;
+ int y_max;
+ int x_bits;
+ int y_bits;
+ unsigned int x_res;
+ unsigned int y_res;
+ int (*hw_init)(struct psmouse *);
+ void (*process_packet)(struct psmouse *);
+ int (*decode_fields)(struct alps_fields *, unsigned char *, struct psmouse *);
+ void (*set_abs_params)(struct alps_data *, struct input_dev *);
+ int prev_fin;
+ int multi_packet;
+ int second_touch;
+ unsigned char multi_data[6];
+ struct alps_fields f;
+ u8 quirks;
+ struct timer_list timer;
+};
+
+typedef __u64 timeu64_t;
+
+typedef void (*of_init_fn_1)(struct device_node *);
+
+typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_cell_post_process_t)(void *, const char *, int, unsigned int, void *, size_t);
+
+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 nvmem_keepout {
+ unsigned int start;
+ unsigned int end;
+ unsigned char value;
+};
+
+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_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;
+ void (*fixup_dt_cell_info)(struct nvmem_device *, struct nvmem_cell_info *);
+ 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;
+ 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 {
+ struct device dev;
+ struct nvmem_device *nvmem;
+ int (*add_cells)(struct nvmem_layout *);
+};
+
+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;
+};
+
+struct rtc_class_ops {
+ int (*ioctl)(struct device *, unsigned int, long unsigned int);
+ 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 *);
+ int (*set_offset)(struct device *, long int);
+ int (*param_get)(struct device *, struct rtc_param *);
+ int (*param_set)(struct device *, struct rtc_param *);
+};
+
+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_device {
+ struct device dev;
+ struct module *owner;
+ int id;
+ const struct rtc_class_ops *ops;
+ struct mutex ops_lock;
+ struct cdev char_dev;
+ long unsigned int flags;
+ long unsigned int 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;
+ long unsigned int set_offset_nsec;
+ long unsigned int 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;
+};
+
+struct sun6i_rtc_clk_data {
+ long unsigned int rc_osc_rate;
+ unsigned int fixed_prescaler: 16;
+ unsigned int has_prescaler: 1;
+ unsigned int has_out_clk: 1;
+ unsigned int has_losc_en: 1;
+ unsigned int has_auto_swt: 1;
+};
+
+struct sun6i_rtc_dev {
+ struct rtc_device *rtc;
+ const struct sun6i_rtc_clk_data *data;
+ void *base;
+ int irq;
+ time64_t alarm;
+ long unsigned int flags;
+ struct clk_hw hw;
+ struct clk_hw *int_osc;
+ struct clk *losc;
+ struct clk *ext_losc;
+ spinlock_t lock;
+};
+
+struct rt_mutex {
+ struct rt_mutex_base rtmutex;
+};
+
+struct i2c_msg {
+ __u16 addr;
+ __u16 flags;
+ __u16 len;
+ __u8 *buf;
+};
+
+union i2c_smbus_data {
+ __u8 byte;
+ __u16 word;
+ __u8 block[34];
+};
+
+struct i2c_adapter;
+
+struct i2c_client {
+ short unsigned int flags;
+ short unsigned int 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;
+ long unsigned int 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 dentry *debugfs;
+ long unsigned int addrs_in_instantiation[2];
+};
+
+struct i2c_algorithm {
+ union {
+ int (*xfer)(struct i2c_adapter *, struct i2c_msg *, int);
+ int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
+ };
+ union {
+ int (*xfer_atomic)(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, short unsigned int, char, u8, int, union i2c_smbus_data *);
+ int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+ u32 (*functionality)(struct i2c_adapter *);
+};
+
+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_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_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 dw_i2c_dev {
+ struct device *dev;
+ struct regmap *map;
+ struct regmap *sysmap;
+ void *base;
+ void *ext;
+ struct completion cmd_complete;
+ struct clk *clk;
+ struct clk *pclk;
+ struct reset_control *rst;
+ struct i2c_client *slave;
+ u32 (*get_clk_rate_khz)(struct dw_i2c_dev *);
+ int cmd_err;
+ struct i2c_msg *msgs;
+ int msgs_num;
+ int msg_write_idx;
+ u32 tx_buf_len;
+ u8 *tx_buf;
+ int msg_read_idx;
+ u32 rx_buf_len;
+ u8 *rx_buf;
+ int msg_err;
+ unsigned int status;
+ unsigned int abort_source;
+ unsigned int sw_mask;
+ int irq;
+ u32 flags;
+ struct i2c_adapter adapter;
+ u32 functionality;
+ u32 master_cfg;
+ u32 slave_cfg;
+ unsigned int tx_fifo_depth;
+ unsigned int rx_fifo_depth;
+ int rx_outstanding;
+ struct i2c_timings timings;
+ u32 sda_hold_time;
+ u16 ss_hcnt;
+ u16 ss_lcnt;
+ u16 fs_hcnt;
+ u16 fs_lcnt;
+ u16 fp_hcnt;
+ u16 fp_lcnt;
+ u16 hs_hcnt;
+ u16 hs_lcnt;
+ int (*acquire_lock)();
+ void (*release_lock)();
+ int semaphore_idx;
+ bool shared_with_punit;
+ int (*init)(struct dw_i2c_dev *);
+ int (*set_sda_hold_time)(struct dw_i2c_dev *);
+ int mode;
+ struct i2c_bus_recovery_info rinfo;
+};
+
+struct syscon_poweroff_data {
+ struct regmap *map;
+ u32 offset;
+ u32 value;
+ u32 mask;
+};
+
+struct thermal_attr {
+ struct device_attribute attr;
+ char name[20];
+};
+
+struct thermal_trip_attrs {
+ struct thermal_attr type;
+ struct thermal_attr temp;
+ struct thermal_attr hyst;
+};
+
+struct thermal_trip_desc {
+ struct thermal_trip trip;
+ struct thermal_trip_attrs trip_attrs;
+ struct list_head notify_list_node;
+ int notify_temp;
+ int threshold;
+};
+
+struct thermal_governor;
+
+struct thermal_zone_device {
+ int id;
+ char type[20];
+ struct device device;
+ struct completion removal;
+ struct completion resume;
+ struct attribute_group trips_attribute_group;
+ enum thermal_device_mode mode;
+ void *devdata;
+ int num_trips;
+ long unsigned int passive_delay_jiffies;
+ long unsigned int polling_delay_jiffies;
+ long unsigned int recheck_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;
+ bool resuming;
+ struct thermal_trip_desc trips[0];
+};
+
+struct thermal_governor {
+ const char *name;
+ int (*bind_to_tz)(struct thermal_zone_device *);
+ void (*unbind_from_tz)(struct thermal_zone_device *);
+ void (*trip_crossed)(struct thermal_zone_device *, const struct thermal_trip *, bool);
+ void (*manage)(struct thermal_zone_device *);
+ void (*update_tz)(struct thermal_zone_device *, enum thermal_notify_event);
+ struct list_head governor_list;
+};
+
+struct thermal_instance {
+ int id;
+ char name[20];
+ struct thermal_cooling_device *cdev;
+ const struct thermal_trip *trip;
+ bool initialized;
+ long unsigned int upper;
+ long unsigned int lower;
+ long unsigned int 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 watchdog_info {
+ __u32 options;
+ __u32 firmware_version;
+ __u8 identity[32];
+};
+
+struct watchdog_device;
+
+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 *, long unsigned int, void *);
+ long int (*ioctl)(struct watchdog_device *, unsigned int, long unsigned int);
+};
+
+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;
+ long unsigned int status;
+ struct list_head deferred;
+};
+
+struct watchdog_governor {
+ const char name[20];
+ void (*pretimeout)(struct watchdog_device *);
+};
+
+struct starfive_wdt_variant {
+ unsigned int control;
+ unsigned int load;
+ unsigned int reload;
+ unsigned int enable;
+ unsigned int value;
+ unsigned int int_clr;
+ unsigned int unlock;
+ unsigned int int_status;
+ u32 unlock_key;
+ char enrst_shift;
+ char en_shift;
+ bool intclr_check;
+ char intclr_ava_shift;
+ bool double_timeout;
+};
+
+struct starfive_wdt {
+ struct watchdog_device wdd;
+ spinlock_t lock;
+ void *base;
+ struct clk *core_clk;
+ struct clk *apb_clk;
+ const struct starfive_wdt_variant *variant;
+ long unsigned int freq;
+ u32 count;
+ u32 reload;
+};
+
+struct srcu_notifier_head {
+ struct mutex mutex;
+ struct srcu_usage srcuu;
+ struct srcu_struct srcu;
+ struct notifier_block *head;
+};
+
+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 cpufreq_governor;
+
+struct cpufreq_frequency_table;
+
+struct cpufreq_stats;
+
+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 cpufreq_policy_data {
+ struct cpufreq_cpuinfo cpuinfo;
+ struct cpufreq_frequency_table *freq_table;
+ unsigned int cpu;
+ unsigned int min;
+ unsigned int max;
+};
+
+struct cpufreq_freqs {
+ struct cpufreq_policy *policy;
+ unsigned int old;
+ unsigned int new;
+ u8 flags;
+};
+
+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_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, long unsigned int, long unsigned int, long unsigned int);
+ 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 *);
+ void (*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 kernel_cpustat {
+ u64 cpustat[10];
+};
+
+struct dev_pm_opp;
+
+typedef int (*config_regulators_t)(struct device *, struct dev_pm_opp *, struct dev_pm_opp *, struct regulator **, unsigned int);
+
+typedef int (*config_clks_t)(struct device *, struct opp_table *, struct dev_pm_opp *, void *, bool);
+
+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 device **required_devs;
+};
+
+struct cpufreq_dt_platform_data {
+ bool have_governor_per_policy;
+ unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
+ int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
+ int (*suspend)(struct cpufreq_policy *);
+ int (*resume)(struct cpufreq_policy *);
+};
+
+struct private_data {
+ struct list_head node;
+ cpumask_var_t cpus;
+ struct device *cpu_dev;
+ struct cpufreq_frequency_table *freq_table;
+ bool have_static_opps;
+ int opp_token;
+};
+
+struct mmc_data;
+
+struct mmc_request;
+
+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_host;
+
+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;
+};
+
+typedef unsigned int mmc_pm_flag_t;
+
+struct mmc_ios {
+ unsigned int clock;
+ short unsigned int 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 led_trigger;
+
+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;
+ short unsigned int max_segs;
+ short unsigned int 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 hsq_enabled;
+ int hsq_depth;
+ u32 err_stats[15];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long unsigned int private[0];
+};
+
+struct mmc_cid {
+ unsigned int manfid;
+ char prod_name[8];
+ unsigned char prv;
+ unsigned int serial;
+ short unsigned int oemid;
+ short unsigned int year;
+ unsigned char hwrev;
+ unsigned char fwrev;
+ unsigned char month;
+};
+
+struct mmc_csd {
+ unsigned char structure;
+ unsigned char mmca_vsn;
+ short unsigned int cmdclass;
+ short unsigned int taac_clks;
+ unsigned int taac_ns;
+ unsigned int c_size;
+ unsigned int r2w_factor;
+ unsigned int max_dtr;
+ unsigned int erase_size;
+ unsigned int wp_grp_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;
+ 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;
+ long long unsigned int 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 {
+ short unsigned int vendor;
+ short unsigned int device;
+ short unsigned int blksize;
+ unsigned int max_dtr;
+};
+
+struct mmc_part {
+ u64 size;
+ unsigned int part_cfg;
+ char name[20];
+ bool force_ro;
+ unsigned int area_type;
+};
+
+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;
+ unsigned int wp_grp_size;
+ 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;
+};
+
+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 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 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 *);
+};
+
+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 *);
+};
+
+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 *);
+};
+
+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,
+};
+
+struct mmc_busy_data {
+ struct mmc_card *card;
+ bool retry_crc_err;
+ enum mmc_busy_cmd busy_cmd;
+};
+
+struct mmc_op_cond_busy_data {
+ struct mmc_host *host;
+ u32 ocr;
+ struct mmc_command *cmd;
+};
+
+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;
+ short unsigned int vendor;
+ short unsigned int 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 spi_device_id {
+ char name[32];
+ kernel_ulong_t driver_data;
+};
+
+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;
+};
+
+struct mmc_spi_platform_data {
+ int (*init)(struct device *, irqreturn_t (*)(int, void *), void *);
+ void (*exit)(struct device *, void *);
+ long unsigned int caps;
+ long unsigned int caps2;
+ u16 detect_delay;
+ u16 powerup_msecs;
+ u32 ocr_mask;
+ void (*setpower)(struct device *, unsigned int);
+};
+
+struct scratch {
+ u8 status[29];
+ u8 data_token;
+ __be16 crc_val;
+};
+
+struct mmc_spi_host {
+ struct mmc_host *mmc;
+ struct spi_device *spi;
+ unsigned char power_mode;
+ u16 powerup_msecs;
+ struct mmc_spi_platform_data *pdata;
+ struct spi_transfer token;
+ struct spi_transfer t;
+ struct spi_transfer crc;
+ struct spi_transfer early_status;
+ struct spi_message m;
+ struct spi_transfer status;
+ struct spi_message readback;
+ struct scratch *data;
+ void *ones;
+};
+
+struct led_trigger {};
+
+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 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;
+ 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;
+ long: 64;
+ long: 64;
+ long unsigned int 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, short unsigned int);
+ 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 *);
+};
+
+struct sdhci_pltfm_data {
+ const struct sdhci_ops *ops;
+ unsigned int quirks;
+ unsigned int quirks2;
+};
+
+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;
+ long unsigned int private[0];
+};
+
+struct sdhci_cdns_phy_param {
+ u8 addr;
+ u8 data;
+};
+
+struct sdhci_cdns_priv {
+ void *hrs_addr;
+ void *ctl_addr;
+ spinlock_t wrlock;
+ bool enhanced_strobe;
+ void (*priv_writel)(struct sdhci_cdns_priv *, u32, void *);
+ struct reset_control *rst_hw;
+ unsigned int nr_phy_params;
+ struct sdhci_cdns_phy_param phy_params[0];
+};
+
+struct sdhci_cdns_phy_cfg {
+ const char *property;
+ u8 addr;
+};
+
+struct sdhci_cdns_drv_data {
+ int (*init)(struct platform_device *);
+ const struct sdhci_pltfm_data pltfm_data;
+};
+
+typedef long unsigned int efi_status_t;
+
+typedef u8 efi_bool_t;
+
+typedef u16 efi_char16_t;
+
+typedef struct {
+ u64 signature;
+ u32 revision;
+ u32 headersize;
+ u32 crc32;
+ u32 reserved;
+} efi_table_hdr_t;
+
+typedef struct {
+ u32 type;
+ u32 pad;
+ u64 phys_addr;
+ u64 virt_addr;
+ u64 num_pages;
+ u64 attribute;
+} efi_memory_desc_t;
+
+typedef struct {
+ efi_guid_t guid;
+ u32 headersize;
+ u32 flags;
+ u32 imagesize;
+} efi_capsule_header_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 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 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 *, long unsigned int *, void *);
+
+typedef efi_status_t efi_get_next_variable_t(long unsigned int *, efi_char16_t *, efi_guid_t *);
+
+typedef efi_status_t efi_set_variable_t(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *);
+
+typedef efi_status_t efi_get_next_high_mono_count_t(u32 *);
+
+typedef void efi_reset_system_t(int, efi_status_t, long unsigned int, efi_char16_t *);
+
+typedef efi_status_t efi_set_virtual_address_map_t(long unsigned int, long unsigned int, u32, efi_memory_desc_t *);
+
+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 **, long unsigned int, long unsigned int);
+
+typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **, long unsigned int, u64 *, int *);
+
+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;
+ long unsigned int desc_version;
+ long unsigned int desc_size;
+ long unsigned int flags;
+};
+
+struct efi {
+ const efi_runtime_services_t *runtime;
+ unsigned int runtime_version;
+ unsigned int runtime_supported_mask;
+ long unsigned int acpi;
+ long unsigned int acpi20;
+ long unsigned int smbios;
+ long unsigned int smbios3;
+ long unsigned int esrt;
+ long unsigned int tpm_log;
+ long unsigned int tpm_final_log;
+ long unsigned int mokvar_table;
+ long unsigned int coco_secret;
+ long unsigned int 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;
+ long unsigned int flags;
+};
+
+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;
+ long unsigned int *data_size;
+ void *data;
+ } GET_VARIABLE;
+ struct {
+ long unsigned int *name_size;
+ efi_char16_t *name;
+ efi_guid_t *vendor;
+ } GET_NEXT_VARIABLE;
+ struct {
+ efi_char16_t *name;
+ efi_guid_t *vendor;
+ u32 attr;
+ long unsigned int 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;
+ long unsigned int count;
+ long unsigned int sg_list;
+ } UPDATE_CAPSULE;
+ struct {
+ efi_capsule_header_t **capsules;
+ long unsigned int 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 of_timer_irq {
+ int irq;
+ int index;
+ const char *name;
+ long unsigned int flags;
+ irq_handler_t handler;
+};
+
+struct of_timer_base {
+ void *base;
+ const char *name;
+ int index;
+};
+
+struct of_timer_clk {
+ struct clk *clk;
+ const char *name;
+ int index;
+ long unsigned int rate;
+ long unsigned int 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;
+ long: 64;
+};
+
+struct hid_device_id {
+ __u16 bus;
+ __u16 group;
+ __u32 vendor;
+ __u32 product;
+ kernel_ulong_t driver_data;
+};
+
+enum hid_report_type {
+ HID_INPUT_REPORT = 0,
+ HID_OUTPUT_REPORT = 1,
+ HID_FEATURE_REPORT = 2,
+ HID_REPORT_TYPES = 3,
+};
+
+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,
+};
+
+enum {
+ BPF_MAX_TRAMP_LINKS = 38,
+};
+
+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 hid_type {
+ HID_TYPE_OTHER = 0,
+ HID_TYPE_USBMOUSE = 1,
+ HID_TYPE_USBNONE = 2,
+};
+
+struct hid_report;
+
+struct hid_report_enum {
+ unsigned int numbered;
+ struct list_head report_list;
+ struct hid_report *report_id_hash[256];
+};
+
+struct hid_collection;
+
+struct hid_driver;
+
+struct hid_ll_driver;
+
+struct hid_field;
+
+struct hid_usage;
+
+struct hid_device {
+ const __u8 *dev_rdesc;
+ unsigned int dev_rsize;
+ const __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;
+ long unsigned int 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 *);
+ short unsigned int 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_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;
+};
+
+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;
+ const __u8 *longdata;
+ } data;
+};
+
+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_collection {
+ int parent_idx;
+ unsigned int type;
+ unsigned int usage;
+ unsigned int level;
+};
+
+struct hid_usage {
+ unsigned int hid;
+ unsigned int collection_index;
+ unsigned int usage_index;
+ __s8 resolution_multiplier;
+ __s8 wheel_factor;
+ __u16 code;
+ __u8 type;
+ __s16 hat_min;
+ __s16 hat_max;
+ __s16 hat_dir;
+ __s16 wheel_accumulated;
+};
+
+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_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;
+};
+
+struct hid_field_entry {
+ struct list_head list;
+ struct hid_field *field;
+ unsigned int index;
+ __s32 priority;
+};
+
+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 *);
+ const __u8 * (*report_fixup)(struct hid_device *, __u8 *, unsigned int *);
+ int (*input_mapping)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
+ int (*input_mapped)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, 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 *);
+ struct device_driver driver;
+};
+
+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;
+};
+
+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;
+};
+
+struct hid_report_id {
+ __u32 report_type;
+};
+
+struct hid_usage_id {
+ __u32 usage_hid;
+ __u32 usage_type;
+ __u32 usage_code;
+};
+
+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 rpmsg_device_id {
+ char name[32];
+ kernel_ulong_t driver_data;
+};
+
+struct rpmsg_channel_info {
+ char name[32];
+ u32 src;
+ u32 dst;
+};
+
+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_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_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_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;
+};
+
+struct iio_mount_matrix {
+ const char *rotation[9];
+};
+
+struct sunxi_sid_cfg {
+ u32 value_offset;
+ u32 size;
+ bool need_register_readout;
+};
+
+struct sunxi_sid {
+ void *base;
+ u32 value_offset;
+};
+
+struct snd_pci_quirk {
+ short unsigned int subvendor;
+ short unsigned int subdevice;
+ short unsigned int subdevice_mask;
+ int value;
+};
+
+struct snd_fasync {
+ struct fasync_struct *fasync;
+ int signal;
+ int poll;
+ int on;
+ struct list_head list;
+};
+
+typedef u32 u_int32_t;
+
+typedef u64 u_int64_t;
+
+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 controls_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;
+};
+
+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 int size;
+ short unsigned int 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;
+};
+
+struct snd_aes_iec958 {
+ unsigned char status[24];
+ unsigned char subcode[147];
+ unsigned char pad;
+ unsigned char dig_subframe[4];
+};
+
+typedef long unsigned int snd_pcm_uframes_t;
+
+typedef long int snd_pcm_sframes_t;
+
+enum {
+ SNDRV_PCM_STREAM_PLAYBACK = 0,
+ SNDRV_PCM_STREAM_CAPTURE = 1,
+ SNDRV_PCM_STREAM_LAST = 1,
+};
+
+typedef int snd_pcm_access_t;
+
+typedef int snd_pcm_format_t;
+
+typedef int snd_pcm_subformat_t;
+
+typedef int snd_pcm_state_t;
+
+typedef int snd_pcm_hw_param_t;
+
+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_mask {
+ __u32 bits[8];
+};
+
+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 sync[16];
+ unsigned char reserved[48];
+};
+
+enum {
+ SNDRV_PCM_TSTAMP_NONE = 0,
+ SNDRV_PCM_TSTAMP_ENABLE = 1,
+ SNDRV_PCM_TSTAMP_LAST = 1,
+};
+
+struct snd_pcm_channel_info {
+ unsigned int channel;
+ __kernel_off_t offset;
+ unsigned int first;
+ unsigned int step;
+};
+
+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,
+};
+
+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;
+};
+
+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 {
+ 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 snd_ctl_elem_type_t;
+
+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 {
+ 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 int min;
+ long int max;
+ long int step;
+ } integer;
+ struct {
+ long long int min;
+ long long int max;
+ long long int 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_ctl_elem_value {
+ struct snd_ctl_elem_id id;
+ unsigned int indirect: 1;
+ union {
+ union {
+ long int value[128];
+ long int *value_ptr;
+ } integer;
+ union {
+ long long int value[64];
+ long long int *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_kcontrol;
+
+typedef int snd_kcontrol_info_t(struct snd_kcontrol *, struct snd_ctl_elem_info *);
+
+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 *);
+
+typedef int snd_kcontrol_tlv_rw_t(struct snd_kcontrol *, int, unsigned int, unsigned int *);
+
+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;
+ long unsigned int private_value;
+ void *private_data;
+ void (*private_free)(struct snd_kcontrol *);
+ struct snd_kcontrol_volatile vd[0];
+};
+
+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;
+ long unsigned int private_value;
+};
+
+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;
+};
+
+enum {
+ SND_CTL_SUBDEV_PCM = 0,
+ SND_CTL_SUBDEV_RAWMIDI = 1,
+ SND_CTL_SUBDEV_ITEMS = 2,
+};
+
+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 *, short unsigned int, void **);
+ int (*release)(struct snd_info_entry *, short unsigned int, void *);
+ ssize_t (*read)(struct snd_info_entry *, void *, struct file *, char *, size_t, loff_t);
+ ssize_t (*write)(struct snd_info_entry *, void *, struct file *, const char *, 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, long unsigned int);
+ int (*mmap)(struct snd_info_entry *, void *, struct inode *, struct file *, struct vm_area_struct *);
+};
+
+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;
+};
+
+enum snd_dma_sync_mode {
+ SNDRV_DMA_SYNC_CPU = 0,
+ SNDRV_DMA_SYNC_DEVICE = 1,
+};
+
+struct snd_pcm_hardware {
+ unsigned int info;
+ u64 formats;
+ u32 subformats;
+ 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_pcm_substream;
+
+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, long unsigned int, long unsigned int);
+ int (*copy)(struct snd_pcm_substream *, int, long unsigned int, struct iov_iter *, long unsigned int);
+ struct page * (*page)(struct snd_pcm_substream *, long unsigned int);
+ int (*mmap)(struct snd_pcm_substream *, struct vm_area_struct *);
+ int (*ack)(struct snd_pcm_substream *);
+};
+
+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 int 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;
+ struct snd_info_entry *proc_root;
+ unsigned int hw_opened: 1;
+ unsigned int managed_buffer_alloc: 1;
+};
+
+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_hw_rule;
+
+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_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_ratnum {
+ unsigned int num;
+ unsigned int den_min;
+ unsigned int den_max;
+ unsigned int den_step;
+};
+
+struct snd_ratden {
+ unsigned int num_min;
+ unsigned int num_max;
+ unsigned int num_step;
+ unsigned int den;
+};
+
+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;
+};
+
+struct snd_pcm_hw_constraint_list {
+ const unsigned int *list;
+ unsigned int count;
+ unsigned int mask;
+};
+
+struct snd_pcm_hw_constraint_ranges {
+ unsigned int count;
+ const struct snd_interval *ranges;
+ unsigned int mask;
+};
+
+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;
+ long unsigned int hw_ptr_jiffies;
+ long unsigned int 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;
+ bool std_sync_id;
+ 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;
+};
+
+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_info_entry *proc_root;
+ struct snd_kcontrol *chmap_kctl;
+ struct device *dev;
+};
+
+struct snd_pcm {
+ struct snd_card *card;
+ struct list_head list;
+ int device;
+ unsigned int info_flags;
+ short unsigned int dev_class;
+ short unsigned int 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;
+};
+
+struct snd_timer_hardware {
+ unsigned int flags;
+ long unsigned int resolution;
+ long unsigned int resolution_min;
+ long unsigned int resolution_max;
+ long unsigned int ticks;
+ int (*open)(struct snd_timer *);
+ int (*close)(struct snd_timer *);
+ long unsigned int (*c_resolution)(struct snd_timer *);
+ int (*start)(struct snd_timer *);
+ int (*stop)(struct snd_timer *);
+ int (*set_period)(struct snd_timer *, long unsigned int, long unsigned int);
+ int (*precise_resolution)(struct snd_timer *, long unsigned int *, long unsigned int *);
+};
+
+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;
+ long unsigned int 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;
+};
+
+typedef struct {
+ struct snd_pcm_substream *lock;
+ long unsigned int flags;
+} class_pcm_stream_lock_irqsave_t;
+
+struct snd_pcm_chmap_elem {
+ unsigned char channels;
+ unsigned char map[15];
+};
+
+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;
+};
+
+typedef int (*pcm_transfer_f)(struct snd_pcm_substream *, int, long unsigned int, struct iov_iter *, long unsigned int);
+
+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 async_domain {
+ struct list_head pending;
+ unsigned int registered: 1;
+};
+
+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_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_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_compressed_buffer {
+ __u32 fragment_size;
+ __u32 fragments;
+};
+
+struct snd_compr_params {
+ struct snd_compressed_buffer buffer;
+ struct snd_codec codec;
+ __u8 no_wake_mode;
+};
+
+struct snd_compr_tstamp {
+ __u32 byte_offset;
+ __u32 copied_total;
+ __u32 pcm_frames;
+ __u32 pcm_io_frames;
+ __u32 sampling_rate;
+};
+
+enum snd_compr_direction {
+ SND_COMPRESS_PLAYBACK = 0,
+ SND_COMPRESS_CAPTURE = 1,
+};
+
+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_compr_codec_caps {
+ __u32 codec;
+ __u32 num_descriptors;
+ struct snd_codec_desc descriptor[32];
+};
+
+struct snd_compr_metadata {
+ __u32 key;
+ __u32 value[8];
+};
+
+struct snd_compr_ops;
+
+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;
+};
+
+struct snd_compr_stream;
+
+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 *, 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 *);
+};
+
+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;
+};
+
+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;
+ char id[64];
+ struct snd_info_entry *proc_root;
+ struct snd_info_entry *proc_info_entry;
+};
+
+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;
+ long unsigned int *dvalues;
+};
+
+struct snd_soc_dobj_widget {
+ unsigned int *kcontrol_type;
+};
+
+struct snd_soc_component;
+
+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;
+};
+
+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_card;
+
+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_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,
+};
+
+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 *);
+ short unsigned int 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;
+};
+
+struct snd_soc_pcm_stream {
+ const char *stream_name;
+ u64 formats;
+ u32 subformats;
+ 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_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;
+ const 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_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;
+};
+
+enum snd_soc_dpcm_trigger {
+ SND_SOC_DPCM_TRIGGER_PRE = 0,
+ SND_SOC_DPCM_TRIGGER_POST = 1,
+};
+
+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_dai_link_component;
+
+struct snd_soc_dai_link_ch_map;
+
+struct snd_soc_pcm_runtime;
+
+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_ch_map *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_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;
+};
+
+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;
+};
+
+enum snd_soc_pcm_subclass {
+ SND_SOC_PCM_CLASS_PCM = 0,
+ SND_SOC_PCM_CLASS_BE = 1,
+};
+
+struct snd_soc_dapm_stats {
+ int power_checks;
+ int path_checks;
+ int neighbour_checks;
+};
+
+struct snd_soc_codec_conf;
+
+struct snd_soc_aux_dev;
+
+struct snd_soc_card {
+ const char *name;
+ const char *long_name;
+ const char *driver_name;
+ const char *components;
+ char dmi_longname[80];
+ short unsigned int pci_subsystem_vendor;
+ short unsigned int 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 int 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;
+};
+
+struct snd_soc_dapm_widget_list {
+ int num_widgets;
+ struct snd_soc_dapm_widget *widgets[0];
+};
+
+struct snd_soc_dapm_pinctrl_priv {
+ const char *active_state;
+ const char *sleep_state;
+};
+
+enum snd_soc_dapm_direction {
+ SND_SOC_DAPM_DIR_IN = 0,
+ SND_SOC_DAPM_DIR_OUT = 1,
+};
+
+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_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 int 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;
+ unsigned int initialized: 1;
+ int num_components;
+ struct snd_soc_component *components[0];
+};
+
+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_link_component {
+ const char *name;
+ struct device_node *of_node;
+ const char *dai_name;
+ const struct of_phandle_args *dai_args;
+};
+
+struct snd_soc_dai_link_ch_map {
+ unsigned int cpu;
+ unsigned int codec;
+ unsigned int ch_mask;
+};
+
+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 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 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_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, const unsigned int *, unsigned int, const unsigned int *);
+ int (*get_channel_map)(const 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 *);
+ snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *, struct snd_soc_dai *);
+ const 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_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 *, 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_jack;
+
+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, long unsigned int, struct iov_iter *, long unsigned int);
+ struct page * (*page)(struct snd_soc_component *, struct snd_pcm_substream *, long unsigned int);
+ 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;
+};
+
+struct snd_jack;
+
+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_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 *);
+};
+
+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 net_device_devres {
+ struct net_device *ndev;
+};
+
+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_basic {
+ __u64 bytes;
+ __u32 packets;
+};
+
+struct gnet_stats_rate_est {
+ __u32 bps;
+ __u32 pps;
+};
+
+struct gnet_stats_rate_est64 {
+ __u64 bps;
+ __u64 pps;
+};
+
+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;
+};
+
+enum netdev_reg_state {
+ NETREG_UNINITIALIZED = 0,
+ NETREG_REGISTERED = 1,
+ NETREG_UNREGISTERING = 2,
+ NETREG_UNREGISTERED = 3,
+ NETREG_RELEASED = 4,
+ NETREG_DUMMY = 5,
+};
+
+struct netdev_name_node {
+ struct hlist_node hlist;
+ struct list_head list;
+ struct net_device *dev;
+ const char *name;
+ struct callback_head rcu;
+};
+
+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 ipv4_devconf {
+ void *sysctl;
+ int data[33];
+ long unsigned int state[1];
+};
+
+typedef u32 compat_caddr_t;
+
+struct ifconf {
+ int ifc_len;
+ union {
+ char *ifcu_buf;
+ struct ifreq *ifcu_req;
+ } ifc_ifcu;
+};
+
+struct compat_ifmap {
+ compat_ulong_t mem_start;
+ compat_ulong_t mem_end;
+ short unsigned int base_addr;
+ unsigned char irq;
+ unsigned char dma;
+ unsigned char port;
+};
+
+struct compat_ifconf {
+ compat_int_t ifc_len;
+ compat_caddr_t ifcbuf;
+};
+
+enum netdev_priv_flags {
+ IFF_802_1Q_VLAN = 1,
+ IFF_EBRIDGE = 2,
+ IFF_BONDING = 4,
+ IFF_ISATAP = 8,
+ IFF_WAN_HDLC = 16,
+ IFF_XMIT_DST_RELEASE = 32,
+ IFF_DONT_BRIDGE = 64,
+ IFF_DISABLE_NETPOLL = 128,
+ IFF_MACVLAN_PORT = 256,
+ IFF_BRIDGE_PORT = 512,
+ IFF_OVS_DATAPATH = 1024,
+ IFF_TX_SKB_SHARING = 2048,
+ IFF_UNICAST_FLT = 4096,
+ IFF_TEAM_PORT = 8192,
+ IFF_SUPP_NOFCS = 16384,
+ IFF_LIVE_ADDR_CHANGE = 32768,
+ IFF_MACVLAN = 65536,
+ IFF_XMIT_DST_RELEASE_PERM = 131072,
+ IFF_L3MDEV_MASTER = 262144,
+ IFF_NO_QUEUE = 524288,
+ IFF_OPENVSWITCH = 1048576,
+ IFF_L3MDEV_SLAVE = 2097152,
+ IFF_TEAM = 4194304,
+ IFF_RXFH_CONFIGURED = 8388608,
+ IFF_PHONY_HEADROOM = 16777216,
+ IFF_MACSEC = 33554432,
+ IFF_NO_RX_HANDLER = 67108864,
+ IFF_FAILOVER = 134217728,
+ IFF_FAILOVER_SLAVE = 268435456,
+ IFF_L3MDEV_RX_HANDLER = 536870912,
+ IFF_NO_ADDRCONF = 1073741824,
+ IFF_TX_SKB_NO_LINEAR = 2147483648,
+};
+
+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 *ifa_list;
+ struct ip_mc_list *mc_list;
+ struct ip_mc_list **mc_hash;
+ int mc_count;
+ spinlock_t mc_tomb_lock;
+ struct ip_mc_list *mc_tomb;
+ long unsigned int mr_v1_seen;
+ long unsigned int mr_v2_seen;
+ long unsigned int mr_maxdelay;
+ long unsigned int mr_qi;
+ long unsigned int 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 devlink;
+
+enum devlink_port_type {
+ DEVLINK_PORT_TYPE_NOTSET = 0,
+ DEVLINK_PORT_TYPE_AUTO = 1,
+ DEVLINK_PORT_TYPE_ETH = 2,
+ DEVLINK_PORT_TYPE_IB = 3,
+};
+
+struct ib_device;
+
+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_linecard;
+
+struct devlink_port_ops;
+
+struct devlink_rate;
+
+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;
+ u32 rel_index;
+};
+
+struct in_ifaddr {
+ struct hlist_node hash;
+ struct in_ifaddr *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;
+ long unsigned int ifa_cstamp;
+ long unsigned int ifa_tstamp;
+};
+
+enum hwtstamp_flags {
+ HWTSTAMP_FLAG_BONDED_PHC_INDEX = 1,
+ HWTSTAMP_FLAG_LAST = 1,
+ HWTSTAMP_FLAG_MASK = 1,
+};
+
+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 *);
+};
+
+enum {
+ BR_MCAST_DIR_RX = 0,
+ BR_MCAST_DIR_TX = 1,
+ BR_MCAST_DIR_SIZE = 2,
+};
+
+enum devlink_rate_type {
+ DEVLINK_RATE_TYPE_LEAF = 0,
+ DEVLINK_RATE_TYPE_NODE = 1,
+};
+
+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_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;
+};
+
+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 *);
+ int (*port_fn_max_io_eqs_get)(struct devlink_port *, u32 *, struct netlink_ext_ack *);
+ int (*port_fn_max_io_eqs_set)(struct devlink_port *, u32, struct netlink_ext_ack *);
+};
+
+struct net_bridge;
+
+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,
+ __UNUSED_NETIF_F_12 = 12,
+ __UNUSED_NETIF_F_13 = 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,
+ __UNUSED_NETIF_F_37 = 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,
+};
+
+struct nf_conntrack {
+ refcount_t use;
+};
+
+enum {
+ SKB_FCLONE_UNAVAILABLE = 0,
+ SKB_FCLONE_ORIG = 1,
+ SKB_FCLONE_CLONE = 2,
+};
+
+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,
+};
+
+struct udp_hslot;
+
+struct udp_table {
+ struct udp_hslot *hash;
+ struct udp_hslot *hash2;
+ unsigned int mask;
+ unsigned int log;
+};
+
+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 ip_tunnel_parm_kern {
+ char name[16];
+ long unsigned int i_flags[1];
+ long unsigned int o_flags[1];
+ __be32 i_key;
+ __be32 o_key;
+ int link;
+ struct iphdr iph;
+};
+
+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 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 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_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 *nh_info;
+ struct nh_group *nh_grp;
+ };
+};
+
+struct udp_hslot {
+ struct hlist_head head;
+ int count;
+ spinlock_t lock;
+ long: 64;
+};
+
+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;
+ u32 secret;
+};
+
+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;
+ u32 secret;
+};
+
+struct net_offload {
+ struct offload_callbacks callbacks;
+ unsigned int flags;
+ u32 secret;
+};
+
+struct rps_sock_flow_table;
+
+struct net_hotdata {
+ struct packet_offload ip_packet_offload;
+ struct net_offload tcpv4_offload;
+ struct net_protocol tcp_protocol;
+ struct net_offload udpv4_offload;
+ struct net_protocol udp_protocol;
+ struct packet_offload ipv6_packet_offload;
+ struct net_offload tcpv6_offload;
+ struct inet6_protocol tcpv6_protocol;
+ struct inet6_protocol udpv6_protocol;
+ struct net_offload udpv6_offload;
+ struct list_head offload_base;
+ struct list_head ptype_all;
+ struct kmem_cache *skbuff_cache;
+ struct kmem_cache *skbuff_fclone_cache;
+ struct kmem_cache *skb_small_head_cache;
+ struct rps_sock_flow_table *rps_sock_flow_table;
+ u32 rps_cpu_mask;
+ int gro_normal_batch;
+ int netdev_budget;
+ int netdev_budget_usecs;
+ int tstamp_prequeue;
+ int max_backlog;
+ int dev_tx_weight;
+ int dev_rx_weight;
+ int sysctl_max_skb_frags;
+ int sysctl_skb_defer_max;
+ int sysctl_mem_pcpu_rsv;
+};
+
+struct napi_gro_cb {
+ union {
+ struct {
+ void *frag0;
+ unsigned int frag0_len;
+ };
+ struct {
+ struct sk_buff *last;
+ long unsigned int age;
+ };
+ };
+ int data_offset;
+ u16 flush;
+ u16 count;
+ u16 proto;
+ u16 pad;
+ 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 ip_fixedid: 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 ip_fixedid: 1;
+ u8 recursion_counter: 4;
+ u8 is_flist: 1;
+ } zeroed;
+ };
+ __wsum csum;
+ union {
+ struct {
+ u16 network_offset;
+ u16 inner_network_offset;
+ };
+ u16 network_offsets[2];
+ };
+};
+
+enum {
+ IP_TUNNEL_CSUM_BIT = 0,
+ IP_TUNNEL_ROUTING_BIT = 1,
+ IP_TUNNEL_KEY_BIT = 2,
+ IP_TUNNEL_SEQ_BIT = 3,
+ IP_TUNNEL_STRICT_BIT = 4,
+ IP_TUNNEL_REC_BIT = 5,
+ IP_TUNNEL_VERSION_BIT = 6,
+ IP_TUNNEL_NO_KEY_BIT = 7,
+ IP_TUNNEL_DONT_FRAGMENT_BIT = 8,
+ IP_TUNNEL_OAM_BIT = 9,
+ IP_TUNNEL_CRIT_OPT_BIT = 10,
+ IP_TUNNEL_GENEVE_OPT_BIT = 11,
+ IP_TUNNEL_VXLAN_OPT_BIT = 12,
+ IP_TUNNEL_NOCACHE_BIT = 13,
+ IP_TUNNEL_ERSPAN_OPT_BIT = 14,
+ IP_TUNNEL_GTP_OPT_BIT = 15,
+ IP_TUNNEL_VTI_BIT = 16,
+ IP_TUNNEL_SIT_ISATAP_BIT = 16,
+ IP_TUNNEL_PFCP_OPT_BIT = 17,
+ __IP_TUNNEL_FLAG_NUM = 18,
+};
+
+struct dst_cache_pcpu;
+
+struct dst_cache {
+ struct dst_cache_pcpu *cache;
+ long unsigned int reset_ts;
+};
+
+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 nh_grp_entry;
+
+struct nh_res_bucket {
+ struct nh_grp_entry *nh_entry;
+ atomic_long_t used_time;
+ long unsigned int migrated_time;
+ bool occupied;
+ u8 nh_flags;
+};
+
+struct nh_grp_entry_stats;
+
+struct nh_grp_entry {
+ struct nexthop *nh;
+ struct nh_grp_entry_stats *stats;
+ u16 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;
+ u64 packets_hw;
+};
+
+struct nh_res_table {
+ struct net *net;
+ u32 nhg_id;
+ struct delayed_work upkeep_dw;
+ struct list_head uw_nh_entries;
+ long unsigned int unbalanced_since;
+ u32 idle_timer;
+ u32 unbalanced_timer;
+ u16 num_nh_buckets;
+ struct nh_res_bucket nh_buckets[0];
+};
+
+struct nh_grp_entry_stats {
+ u64_stats_t packets;
+ struct u64_stats_sync syncp;
+};
+
+struct nh_group {
+ struct nh_group *spare;
+ u16 num_nh;
+ bool is_multipath;
+ bool hash_threshold;
+ bool resilient;
+ bool fdb_nh;
+ bool has_v4;
+ bool hw_stats;
+ struct nh_res_table *res_table;
+ struct nh_grp_entry nh_entries[0];
+};
+
+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;
+ long unsigned int tun_flags[1];
+ __be32 label;
+ u32 nhid;
+ u8 tos;
+ u8 ttl;
+ __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;
+};
+
+typedef u64 sci_t;
+
+enum metadata_type {
+ METADATA_IP_TUNNEL = 0,
+ METADATA_HW_PORT_MUX = 1,
+ METADATA_MACSEC = 2,
+ METADATA_XFRM = 3,
+};
+
+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;
+};
+
+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 page_pool_params_fast {
+ 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;
+};
+
+struct pp_alloc_cache {
+ u32 count;
+ netmem_ref cache[128];
+};
+
+struct ptr_ring {
+ int producer;
+ spinlock_t producer_lock;
+ 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;
+ int size;
+ int batch;
+ void **queue;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct page_pool_params_slow {
+ struct net_device *netdev;
+ unsigned int queue_idx;
+ unsigned int flags;
+ void (*init_callback)(netmem_ref, void *);
+ void *init_arg;
+};
+
+struct page_pool {
+ struct page_pool_params_fast p;
+ int cpuid;
+ u32 pages_state_hold_cnt;
+ bool has_init_callback: 1;
+ bool dma_map: 1;
+ bool dma_sync: 1;
+ long: 0;
+ __u8 __cacheline_group_begin__frag[0];
+ long int frag_users;
+ netmem_ref frag_page;
+ unsigned int frag_offset;
+ long: 0;
+ __u8 __cacheline_group_end__frag[0];
+ long: 64;
+ struct {} __cacheline_group_pad__frag;
+ struct delayed_work release_dw;
+ void (*disconnect)(void *);
+ long unsigned int defer_start;
+ long unsigned int defer_warn;
+ u32 xdp_mem_id;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct pp_alloc_cache alloc;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct ptr_ring ring;
+ void *mp_priv;
+ atomic_t pages_state_release_cnt;
+ refcount_t user_cnt;
+ u64 destroy_cnt;
+ struct page_pool_params_slow slow;
+ struct {
+ struct hlist_node list;
+ u64 detach_time;
+ u32 napi_id;
+ u32 id;
+ } user;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct dmabuf_genpool_chunk_owner;
+
+struct net_iov {
+ long unsigned int __unused_padding;
+ long unsigned int pp_magic;
+ struct page_pool *pp;
+ struct dmabuf_genpool_chunk_owner *owner;
+ long unsigned int dma_addr;
+ atomic_long_t pp_ref_count;
+};
+
+struct pp_memory_provider_params {
+ void *mp_priv;
+};
+
+struct rps_map;
+
+struct rps_dev_flow_table;
+
+struct netdev_rx_queue {
+ struct xdp_rxq_info xdp_rxq;
+ struct rps_map *rps_map;
+ struct rps_dev_flow_table *rps_flow_table;
+ struct kobject kobj;
+ struct net_device *dev;
+ netdevice_tracker dev_tracker;
+ struct napi_struct *napi;
+ struct pp_memory_provider_params mp_params;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct page_pool_params {
+ union {
+ struct {
+ 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;
+ };
+ struct page_pool_params_fast fast;
+ };
+ union {
+ struct {
+ struct net_device *netdev;
+ unsigned int queue_idx;
+ unsigned int flags;
+ void (*init_callback)(netmem_ref, void *);
+ void *init_arg;
+ };
+ struct page_pool_params_slow slow;
+ };
+};
+
+enum netdev_lag_tx_type {
+ NETDEV_LAG_TX_TYPE_UNKNOWN = 0,
+ NETDEV_LAG_TX_TYPE_RANDOM = 1,
+ NETDEV_LAG_TX_TYPE_BROADCAST = 2,
+ NETDEV_LAG_TX_TYPE_ROUNDROBIN = 3,
+ NETDEV_LAG_TX_TYPE_ACTIVEBACKUP = 4,
+ NETDEV_LAG_TX_TYPE_HASH = 5,
+};
+
+enum netdev_lag_hash {
+ NETDEV_LAG_HASH_NONE = 0,
+ NETDEV_LAG_HASH_L2 = 1,
+ NETDEV_LAG_HASH_L34 = 2,
+ NETDEV_LAG_HASH_L23 = 3,
+ NETDEV_LAG_HASH_E23 = 4,
+ NETDEV_LAG_HASH_E34 = 5,
+ NETDEV_LAG_HASH_VLAN_SRCMAC = 6,
+ NETDEV_LAG_HASH_UNKNOWN = 7,
+};
+
+struct netdev_lag_upper_info {
+ enum netdev_lag_tx_type tx_type;
+ enum netdev_lag_hash hash_type;
+};
+
+struct netdev_notifier_info {
+ struct net_device *dev;
+ struct netlink_ext_ack *extack;
+};
+
+struct failover_ops {
+ int (*slave_pre_register)(struct net_device *, struct net_device *);
+ int (*slave_register)(struct net_device *, struct net_device *);
+ int (*slave_pre_unregister)(struct net_device *, struct net_device *);
+ int (*slave_unregister)(struct net_device *, struct net_device *);
+ int (*slave_link_change)(struct net_device *, struct net_device *);
+ int (*slave_name_change)(struct net_device *, struct net_device *);
+ rx_handler_result_t (*slave_handle_frame)(struct sk_buff **);
+};
+
+struct failover {
+ struct list_head list;
+ struct net_device *failover_dev;
+ netdevice_tracker dev_tracker;
+ struct failover_ops *ops;
+};
+
+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 vlan_hdr {
+ __be16 h_vlan_TCI;
+ __be16 h_vlan_encapsulated_proto;
+};
+
+struct nl_info {
+ struct nlmsghdr *nlh;
+ struct net *nl_net;
+ u32 portid;
+ u8 skip_notify: 1;
+ u8 skip_notify_kernel: 1;
+};
+
+struct qdisc_walker {
+ int stop;
+ int skip;
+ int count;
+ int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);
+};
+
+struct qdisc_skb_cb {
+ struct {
+ unsigned int pkt_len;
+ u16 slave_dev_queue_mapping;
+ u16 tc_classid;
+ };
+ unsigned char data[20];
+};
+
+struct tc_skb_cb {
+ struct qdisc_skb_cb qdisc_cb;
+ u32 drop_reason;
+ u16 zone;
+ u16 mru;
+ u8 post_ct: 1;
+ u8 post_ct_snat: 1;
+ u8 post_ct_dnat: 1;
+};
+
+struct fib6_result;
+
+struct fib6_config;
+
+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 *);
+ struct sk_buff * (*xfrm6_gro_udp_encap_rcv)(struct sock *, struct list_head *, 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 *);
+ int (*ip6_xmit)(const struct sock *, struct sk_buff *, struct flowi6 *, __u32, struct ipv6_txoptions *, int, u32);
+};
+
+struct fib6_result {
+ struct fib6_nh *nh;
+ struct fib6_info *f6i;
+ u32 fib6_flags;
+ u8 fib6_type;
+ struct rt6_info *rt6;
+};
+
+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;
+ long unsigned int 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;
+};
+
+struct sch_frag_data {
+ long unsigned int 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 flow_dissector_key_basic {
+ __be16 n_proto;
+ u8 ip_proto;
+ u8 padding;
+};
+
+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_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_ports {
+ union {
+ __be32 ports;
+ struct {
+ __be16 src;
+ __be16 dst;
+ };
+ };
+};
+
+struct flow_dissector_key_eth_addrs {
+ unsigned char dst[6];
+ unsigned char src[6];
+};
+
+struct flow_dissector_key_ip {
+ __u8 tos;
+ __u8 ttl;
+};
+
+struct flow_dissector {
+ long long unsigned int used_keys;
+ short unsigned int offset[33];
+};
+
+struct xsk_queue;
+
+struct xdp_umem;
+
+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;
+ 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 tx_metadata_len;
+ u8 cached_need_wakeup;
+ bool uses_need_wakeup;
+ bool unaligned;
+ bool tx_sw_csum;
+ void *addrs;
+ spinlock_t cq_lock;
+ struct xdp_buff_xsk *free_heads[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_value {
+ __u32 cmd;
+ __u32 data;
+};
+
+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,
+};
+
+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_gstrings {
+ __u32 cmd;
+ __u32 string_set;
+ __u32 len;
+ __u8 data[0];
+};
+
+struct ethtool_sset_info {
+ __u32 cmd;
+ __u32 reserved;
+ __u64 sset_mask;
+ __u32 data[0];
+};
+
+struct ethtool_perm_addr {
+ __u32 cmd;
+ __u32 size;
+ __u8 data[0];
+};
+
+enum ethtool_flags {
+ ETH_FLAG_TXVLAN = 128,
+ ETH_FLAG_RXVLAN = 256,
+ ETH_FLAG_LRO = 32768,
+ ETH_FLAG_NTUPLE = 134217728,
+ ETH_FLAG_RXHASH = 268435456,
+};
+
+struct ethtool_rxfh {
+ __u32 cmd;
+ __u32 rss_context;
+ __u32 indir_size;
+ __u32 key_size;
+ __u8 hfunc;
+ __u8 input_xfrm;
+ __u8 rsvd8[2];
+ __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_ts_info {
+ __u32 cmd;
+ __u32 so_timestamping;
+ __s32 phc_index;
+ __u32 tx_types;
+ __u32 tx_reserved[3];
+ __u32 rx_filters;
+ __u32 rx_reserved[3];
+};
+
+enum ethtool_sfeatures_retval_bits {
+ ETHTOOL_F_UNSUPPORTED__BIT = 0,
+ ETHTOOL_F_WISH__BIT = 1,
+ ETHTOOL_F_COMPAT__BIT = 2,
+};
+
+struct ethtool_per_queue_op {
+ __u32 cmd;
+ __u32 sub_command;
+ __u32 queue_mask[128];
+ char data[0];
+};
+
+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,
+};
+
+enum {
+ ETH_RSS_HASH_TOP_BIT = 0,
+ ETH_RSS_HASH_XOR_BIT = 1,
+ ETH_RSS_HASH_CRC32_BIT = 2,
+ ETH_RSS_HASH_FUNCS_COUNT = 3,
+};
+
+struct flow_rule;
+
+struct ethtool_rx_flow_rule {
+ struct flow_rule *rule;
+ long unsigned int priv[0];
+};
+
+struct flow_match {
+ struct flow_dissector *dissector;
+ void *mask;
+ void *key;
+};
+
+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,
+};
+
+typedef void (*action_destr)(void *);
+
+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,
+};
+
+struct nf_flowtable;
+
+struct psample_group;
+
+struct action_gate_entry;
+
+struct flow_action_cookie;
+
+struct flow_action_entry {
+ enum flow_action_id id;
+ u32 hw_index;
+ long unsigned int 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 {
+ long unsigned int 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 ethtool_rx_flow_spec_input {
+ const struct ethtool_rx_flow_spec *fs;
+ u32 rss_ctx;
+};
+
+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 flow_action_cookie {
+ u32 cookie_len;
+ u8 cookie[0];
+};
+
+struct xdp_desc {
+ __u64 addr;
+ __u32 len;
+ __u32 options;
+};
+
+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;
+ u8 tx_metadata_len;
+ 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;
+};
+
+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_MODULE_FW_FLASH_NTF = 44,
+ ETHTOOL_MSG_PHY_GET_REPLY = 45,
+ ETHTOOL_MSG_PHY_NTF = 46,
+ __ETHTOOL_MSG_KERNEL_CNT = 47,
+ ETHTOOL_MSG_KERNEL_MAX = 46,
+};
+
+struct ethtool_devlink_compat {
+ struct devlink *devlink;
+ union {
+ struct ethtool_flash efl;
+ struct ethtool_drvinfo info;
+ };
+};
+
+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_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;
+};
+
+enum {
+ ETHTOOL_MSG_USER_NONE = 0,
+ ETHTOOL_MSG_STRSET_GET = 1,
+ ETHTOOL_MSG_LINKINFO_GET = 2,
+ ETHTOOL_MSG_LINKINFO_SET = 3,
+ ETHTOOL_MSG_LINKMODES_GET = 4,
+ ETHTOOL_MSG_LINKMODES_SET = 5,
+ ETHTOOL_MSG_LINKSTATE_GET = 6,
+ ETHTOOL_MSG_DEBUG_GET = 7,
+ ETHTOOL_MSG_DEBUG_SET = 8,
+ ETHTOOL_MSG_WOL_GET = 9,
+ ETHTOOL_MSG_WOL_SET = 10,
+ ETHTOOL_MSG_FEATURES_GET = 11,
+ ETHTOOL_MSG_FEATURES_SET = 12,
+ ETHTOOL_MSG_PRIVFLAGS_GET = 13,
+ ETHTOOL_MSG_PRIVFLAGS_SET = 14,
+ ETHTOOL_MSG_RINGS_GET = 15,
+ ETHTOOL_MSG_RINGS_SET = 16,
+ ETHTOOL_MSG_CHANNELS_GET = 17,
+ ETHTOOL_MSG_CHANNELS_SET = 18,
+ ETHTOOL_MSG_COALESCE_GET = 19,
+ ETHTOOL_MSG_COALESCE_SET = 20,
+ ETHTOOL_MSG_PAUSE_GET = 21,
+ ETHTOOL_MSG_PAUSE_SET = 22,
+ ETHTOOL_MSG_EEE_GET = 23,
+ ETHTOOL_MSG_EEE_SET = 24,
+ ETHTOOL_MSG_TSINFO_GET = 25,
+ ETHTOOL_MSG_CABLE_TEST_ACT = 26,
+ ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,
+ ETHTOOL_MSG_TUNNEL_INFO_GET = 28,
+ ETHTOOL_MSG_FEC_GET = 29,
+ ETHTOOL_MSG_FEC_SET = 30,
+ ETHTOOL_MSG_MODULE_EEPROM_GET = 31,
+ ETHTOOL_MSG_STATS_GET = 32,
+ ETHTOOL_MSG_PHC_VCLOCKS_GET = 33,
+ ETHTOOL_MSG_MODULE_GET = 34,
+ ETHTOOL_MSG_MODULE_SET = 35,
+ ETHTOOL_MSG_PSE_GET = 36,
+ ETHTOOL_MSG_PSE_SET = 37,
+ ETHTOOL_MSG_RSS_GET = 38,
+ ETHTOOL_MSG_PLCA_GET_CFG = 39,
+ ETHTOOL_MSG_PLCA_SET_CFG = 40,
+ ETHTOOL_MSG_PLCA_GET_STATUS = 41,
+ ETHTOOL_MSG_MM_GET = 42,
+ ETHTOOL_MSG_MM_SET = 43,
+ ETHTOOL_MSG_MODULE_FW_FLASH_ACT = 44,
+ ETHTOOL_MSG_PHY_GET = 45,
+ __ETHTOOL_MSG_USER_CNT = 46,
+ ETHTOOL_MSG_USER_MAX = 45,
+};
+
+enum ethtool_header_flags {
+ ETHTOOL_FLAG_COMPACT_BITSETS = 1,
+ ETHTOOL_FLAG_OMIT_REPLY = 2,
+ ETHTOOL_FLAG_STATS = 4,
+};
+
+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_PHY_INDEX = 4,
+ __ETHTOOL_A_HEADER_CNT = 5,
+ ETHTOOL_A_HEADER_MAX = 4,
+};
+
+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_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,
+};
+
+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,
+};
+
+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,
+};
+
+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,
+};
+
+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,
+};
+
+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,
+};
+
+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,
+};
+
+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_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,
+};
+
+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_RX_PROFILE = 29,
+ ETHTOOL_A_COALESCE_TX_PROFILE = 30,
+ __ETHTOOL_A_COALESCE_CNT = 31,
+ ETHTOOL_A_COALESCE_MAX = 30,
+};
+
+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_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,
+};
+
+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_STATS = 6,
+ __ETHTOOL_A_TSINFO_CNT = 7,
+ ETHTOOL_A_TSINFO_MAX = 6,
+};
+
+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,
+};
+
+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_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_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 {
+ 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_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,
+};
+
+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_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_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,
+};
+
+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,
+};
+
+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_C33_PSE_ADMIN_STATE = 5,
+ ETHTOOL_A_C33_PSE_ADMIN_CONTROL = 6,
+ ETHTOOL_A_C33_PSE_PW_D_STATUS = 7,
+ ETHTOOL_A_C33_PSE_PW_CLASS = 8,
+ ETHTOOL_A_C33_PSE_ACTUAL_PW = 9,
+ ETHTOOL_A_C33_PSE_EXT_STATE = 10,
+ ETHTOOL_A_C33_PSE_EXT_SUBSTATE = 11,
+ ETHTOOL_A_C33_PSE_AVAIL_PW_LIMIT = 12,
+ ETHTOOL_A_C33_PSE_PW_LIMIT_RANGES = 13,
+ __ETHTOOL_A_PSE_CNT = 14,
+ ETHTOOL_A_PSE_MAX = 13,
+};
+
+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_INPUT_XFRM = 6,
+ ETHTOOL_A_RSS_START_CONTEXT = 7,
+ __ETHTOOL_A_RSS_CNT = 8,
+ ETHTOOL_A_RSS_MAX = 7,
+};
+
+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,
+};
+
+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,
+};
+
+enum {
+ ETHTOOL_A_MODULE_FW_FLASH_UNSPEC = 0,
+ ETHTOOL_A_MODULE_FW_FLASH_HEADER = 1,
+ ETHTOOL_A_MODULE_FW_FLASH_FILE_NAME = 2,
+ ETHTOOL_A_MODULE_FW_FLASH_PASSWORD = 3,
+ ETHTOOL_A_MODULE_FW_FLASH_STATUS = 4,
+ ETHTOOL_A_MODULE_FW_FLASH_STATUS_MSG = 5,
+ ETHTOOL_A_MODULE_FW_FLASH_DONE = 6,
+ ETHTOOL_A_MODULE_FW_FLASH_TOTAL = 7,
+ __ETHTOOL_A_MODULE_FW_FLASH_CNT = 8,
+ ETHTOOL_A_MODULE_FW_FLASH_MAX = 7,
+};
+
+enum {
+ ETHTOOL_A_PHY_UNSPEC = 0,
+ ETHTOOL_A_PHY_HEADER = 1,
+ ETHTOOL_A_PHY_INDEX = 2,
+ ETHTOOL_A_PHY_DRVNAME = 3,
+ ETHTOOL_A_PHY_NAME = 4,
+ ETHTOOL_A_PHY_UPSTREAM_TYPE = 5,
+ ETHTOOL_A_PHY_UPSTREAM_INDEX = 6,
+ ETHTOOL_A_PHY_UPSTREAM_SFP_NAME = 7,
+ ETHTOOL_A_PHY_DOWNSTREAM_SFP_NAME = 8,
+ __ETHTOOL_A_PHY_CNT = 9,
+ ETHTOOL_A_PHY_MAX = 8,
+};
+
+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_SINT = 20,
+ NLA_UINT = 21,
+ __NLA_TYPE_MAX = 22,
+};
+
+struct genlmsghdr {
+ __u8 cmd;
+ __u8 version;
+ __u16 reserved;
+};
+
+struct genl_multicast_group {
+ char name[16];
+ u8 flags;
+};
+
+struct genl_split_ops;
+
+struct genl_info;
+
+struct genl_ops;
+
+struct genl_small_ops;
+
+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 *);
+ int (*bind)(int);
+ void (*unbind)(int);
+ 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;
+ size_t sock_priv_size;
+ void (*sock_priv_init)(void *);
+ void (*sock_priv_destroy)(void *);
+ int id;
+ unsigned int mcgrp_offset;
+ struct xarray *sock_privs;
+};
+
+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 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 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;
+};
+
+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 ethnl_req_info {
+ struct net_device *dev;
+ netdevice_tracker dev_tracker;
+ u32 flags;
+ u32 phy_index;
+};
+
+struct ethnl_reply_data {
+ struct net_device *dev;
+};
+
+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 *);
+};
+
+typedef const char (* const ethnl_string_array_t)[32];
+
+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_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_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,
+};
+
+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_UNSPEC = 0,
+ ETHTOOL_A_TUNNEL_UDP_TABLE = 1,
+ __ETHTOOL_A_TUNNEL_UDP_CNT = 2,
+ ETHTOOL_A_TUNNEL_UDP_MAX = 1,
+};
+
+enum udp_parsable_tunnel_type {
+ UDP_TUNNEL_TYPE_VXLAN = 1,
+ UDP_TUNNEL_TYPE_GENEVE = 2,
+ UDP_TUNNEL_TYPE_VXLAN_GPE = 4,
+};
+
+struct udp_tunnel_info {
+ short unsigned int type;
+ sa_family_t sa_family;
+ __be16 port;
+ u8 hw_priv;
+};
+
+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,
+};
+
+struct udp_tunnel_nic_shared {
+ struct udp_tunnel_nic *udp_tunnel_nic_info;
+ struct list_head devices;
+};
+
+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 *);
+};
+
+struct genl_dumpit_info {
+ struct genl_split_ops op;
+ struct genl_info info;
+};
+
+struct ethnl_tunnel_info_dump_ctx {
+ struct ethnl_req_info req_info;
+ long unsigned int ifindex;
+};
+
+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,
+};
+
+struct plca_reply_data {
+ struct ethnl_reply_data base;
+ struct phy_plca_cfg plca_cfg;
+ struct phy_plca_status plca_st;
+};
+
+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 *, int *);
+ struct module *owner;
+};
+
+enum {
+ INET_FRAG_FIRST_IN = 1,
+ INET_FRAG_LAST_IN = 2,
+ INET_FRAG_COMPLETE = 4,
+ INET_FRAG_HASH_DEAD = 8,
+ INET_FRAG_DROP = 16,
+};
+
+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,
+};
+
+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;
+ long unsigned int rate_last;
+ union {
+ struct {
+ atomic_t rid;
+ };
+ struct callback_head rcu;
+ };
+ __u32 dtime;
+ refcount_t refcnt;
+};
+
+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 {
+ INET_ECN_NOT_ECT = 0,
+ INET_ECN_ECT_1 = 1,
+ INET_ECN_ECT_0 = 2,
+ INET_ECN_CE = 3,
+ INET_ECN_MASK = 3,
+};
+
+struct ipq {
+ struct inet_frag_queue q;
+ u8 ecn;
+ u16 max_df_size;
+ int iif;
+ unsigned int rid;
+ struct inet_peer *peer;
+};
+
+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 *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;
+};
+
+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,
+ INET_FLAGS_MC6_LOOP = 20,
+ INET_FLAGS_RECVERR6_RFC4884 = 21,
+ INET_FLAGS_MC6_ALL = 22,
+ INET_FLAGS_AUTOFLOWLABEL_SET = 23,
+ INET_FLAGS_AUTOFLOWLABEL = 24,
+ INET_FLAGS_DONTFRAG = 25,
+ INET_FLAGS_RECVERR6 = 26,
+ INET_FLAGS_REPFLOW = 27,
+ INET_FLAGS_RTALERT_ISOLATE = 28,
+ INET_FLAGS_SNDFLOW = 29,
+ INET_FLAGS_RTALERT = 30,
+};
+
+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 sockaddr_len;
+ int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+ int (*getsockopt)(struct sock *, int, int, char *, int *);
+ void (*addr2sockaddr)(struct sock *, struct sockaddr *);
+ void (*mtu_reduced)(struct sock *);
+};
+
+struct inet_bind_bucket;
+
+struct inet_bind2_bucket;
+
+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;
+ long unsigned int 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 *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: 8;
+ __u32 lrcv_flowlabel: 20;
+ __u32 unused: 4;
+ long unsigned int 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 icsk_ca_priv[13];
+};
+
+struct inet_bind_bucket {
+ possible_net_t ib_net;
+ int l3mdev;
+ short unsigned int port;
+ signed char fastreuse;
+ signed char fastreuseport;
+ kuid_t fastuid;
+ struct in6_addr fast_v6_rcv_saddr;
+ __be32 fast_rcv_saddr;
+ short unsigned int fast_sk_family;
+ bool fast_ipv6_only;
+ struct hlist_node node;
+ struct hlist_head bhash2;
+};
+
+struct inet_bind2_bucket {
+ possible_net_t ib_net;
+ int l3mdev;
+ short unsigned int port;
+ short unsigned int addr_type;
+ struct in6_addr v6_rcv_saddr;
+ struct hlist_node node;
+ struct hlist_node bhash_node;
+ struct hlist_head owners;
+};
+
+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 inet_timewait_sock {
+ struct sock_common __tw_common;
+ __u32 tw_mark;
+ 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_usec_ts: 1;
+ unsigned int tw_pad: 2;
+ 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;
+};
+
+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,
+};
+
+struct minmax_sample {
+ u32 t;
+ u32 v;
+};
+
+struct minmax {
+ struct minmax_sample s[3];
+};
+
+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,
+};
+
+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 *ireq_opt;
+ struct {
+ struct ipv6_txoptions *ipv6_opt;
+ struct sk_buff *pktopts;
+ };
+ };
+};
+
+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_fastopen_client_fail {
+ TFO_STATUS_UNSPEC = 0,
+ TFO_COOKIE_UNAVAILABLE = 1,
+ TFO_DATA_NOT_ACKED = 2,
+ TFO_SYN_RETRANSMITTED = 3,
+};
+
+struct tcp_fastopen_cookie {
+ __le64 val[2];
+ s8 len;
+ bool exp;
+};
+
+struct tcp_sack_block {
+ u32 start_seq;
+ u32 end_seq;
+};
+
+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_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;
+ bool req_usec_ts;
+ 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);
+ 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 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 tcp_fastopen_request;
+
+struct tcp_sock {
+ struct inet_connection_sock inet_conn;
+ __u8 __cacheline_group_begin__tcp_sock_read_tx[0];
+ u32 max_window;
+ u32 rcv_ssthresh;
+ u32 reordering;
+ u32 notsent_lowat;
+ u16 gso_segs;
+ struct sk_buff *lost_skb_hint;
+ struct sk_buff *retransmit_skb_hint;
+ __u8 __cacheline_group_end__tcp_sock_read_tx[0];
+ __u8 __cacheline_group_begin__tcp_sock_read_txrx[0];
+ u32 tsoffset;
+ u32 snd_wnd;
+ u32 mss_cache;
+ u32 snd_cwnd;
+ u32 prr_out;
+ u32 lost_out;
+ u32 sacked_out;
+ u16 tcp_header_len;
+ u8 scaling_ratio;
+ u8 chrono_type: 2;
+ u8 repair: 1;
+ u8 tcp_usec_ts: 1;
+ u8 is_sack_reneg: 1;
+ u8 is_cwnd_limited: 1;
+ __u8 __cacheline_group_end__tcp_sock_read_txrx[0];
+ __u8 __cacheline_group_begin__tcp_sock_read_rx[0];
+ u32 copied_seq;
+ u32 rcv_tstamp;
+ u32 snd_wl1;
+ u32 tlp_high_seq;
+ u32 rttvar_us;
+ u32 retrans_out;
+ u16 advmss;
+ u16 urg_data;
+ u32 lost;
+ struct minmax rtt_min;
+ struct rb_root out_of_order_queue;
+ u32 snd_ssthresh;
+ u8 recvmsg_inq: 1;
+ __u8 __cacheline_group_end__tcp_sock_read_rx[0];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ __u8 __cacheline_group_begin__tcp_sock_write_tx[0];
+ u32 segs_out;
+ u32 data_segs_out;
+ u64 bytes_sent;
+ u32 snd_sml;
+ u32 chrono_start;
+ u32 chrono_stat[3];
+ u32 write_seq;
+ u32 pushed_seq;
+ u32 lsndtime;
+ u32 mdev_us;
+ u32 rtt_seq;
+ u64 tcp_wstamp_ns;
+ struct list_head tsorted_sent_queue;
+ struct sk_buff *highest_sack;
+ u8 ecn_flags;
+ __u8 __cacheline_group_end__tcp_sock_write_tx[0];
+ __u8 __cacheline_group_begin__tcp_sock_write_txrx[0];
+ __be32 pred_flags;
+ u64 tcp_clock_cache;
+ u64 tcp_mstamp;
+ u32 rcv_nxt;
+ u32 snd_nxt;
+ u32 snd_una;
+ u32 window_clamp;
+ u32 srtt_us;
+ u32 packets_out;
+ u32 snd_up;
+ u32 delivered;
+ u32 delivered_ce;
+ u32 app_limited;
+ u32 rcv_wnd;
+ struct tcp_options_received rx_opt;
+ u8 nonagle: 4;
+ u8 rate_app_limited: 1;
+ __u8 __cacheline_group_end__tcp_sock_write_txrx[0];
+ long: 0;
+ __u8 __cacheline_group_begin__tcp_sock_write_rx[0];
+ u64 bytes_received;
+ u32 segs_in;
+ u32 data_segs_in;
+ u32 rcv_wup;
+ u32 max_packets_out;
+ u32 cwnd_usage_seq;
+ u32 rate_delivered;
+ u32 rate_interval_us;
+ u32 rcv_rtt_last_tsecr;
+ u64 first_tx_mstamp;
+ u64 delivered_mstamp;
+ u64 bytes_acked;
+ struct {
+ u32 rtt_us;
+ u32 seq;
+ u64 time;
+ } rcv_rtt_est;
+ struct {
+ u32 space;
+ u32 seq;
+ u64 time;
+ } rcvq_space;
+ __u8 __cacheline_group_end__tcp_sock_write_rx[0];
+ u32 dsack_dups;
+ u32 compressed_ack_rcv_nxt;
+ struct list_head tsq_node;
+ struct tcp_rack rack;
+ u8 compressed_ack;
+ u8 dup_ack_counter: 2;
+ u8 tlp_retrans: 1;
+ u8 unused: 5;
+ u8 thin_lto: 1;
+ u8 fastopen_connect: 1;
+ u8 fastopen_no_cookie: 1;
+ u8 fastopen_client_fail: 2;
+ 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 keepalive_probes;
+ u32 tcp_tx_delay;
+ u32 mdev_max_us;
+ u32 reord_seen;
+ u32 snd_cwnd_cnt;
+ u32 snd_cwnd_clamp;
+ u32 snd_cwnd_used;
+ u32 snd_cwnd_stamp;
+ u32 prior_cwnd;
+ u32 prr_delivered;
+ u32 last_oow_ack_time;
+ struct hrtimer pacing_timer;
+ struct hrtimer compressed_ack_timer;
+ 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];
+ 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 rto_stamp;
+ u16 total_rto;
+ u16 total_rto_recoveries;
+ u32 total_rto_time;
+ 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;
+ 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 *fastopen_rsk;
+ struct saved_syn *saved_syn;
+ long: 64;
+};
+
+struct tcp_fastopen_request {
+ struct tcp_fastopen_cookie cookie;
+ struct msghdr *data;
+ size_t size;
+ int copied;
+ struct ubuf_info *uarg;
+};
+
+struct tcp_skb_cb {
+ __u32 seq;
+ __u32 end_seq;
+ union {
+ 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;
+ };
+};
+
+typedef u16 u_int16_t;
+
+union nf_inet_addr {
+ __u32 all[4];
+ __be32 ip;
+ __be32 ip6[4];
+ struct in_addr in;
+ struct in6_addr in6;
+};
+
+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;
+};
+
+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 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,
+};
+
+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;
+};
+
+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;
+};
+
+struct ip_ct_sctp {
+ enum sctp_conntrack state;
+ __be32 vtag[2];
+ u8 init[2];
+ u8 last_dir;
+ u8 flags;
+};
+
+enum rt_scope_t {
+ RT_SCOPE_UNIVERSE = 0,
+ RT_SCOPE_SITE = 200,
+ RT_SCOPE_LINK = 253,
+ RT_SCOPE_HOST = 254,
+ RT_SCOPE_NOWHERE = 255,
+};
+
+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_udp {
+ long unsigned int 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];
+ long unsigned int status;
+ possible_net_t ct_net;
+ struct hlist_node nat_bysource;
+ struct {} __nfct_init_offset;
+ struct nf_conn *master;
+ struct nf_ct_ext *ext;
+ union nf_conntrack_proto proto;
+};
+
+enum {
+ XFRM_LOOKUP_ICMP = 1,
+ XFRM_LOOKUP_QUEUE = 2,
+ XFRM_LOOKUP_KEEP_DST_REF = 4,
+};
+
+struct raw_hashinfo {
+ spinlock_t lock;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct hlist_head ht[256];
+};
+
+struct sockcm_cookie {
+ u64 transmit_time;
+ u32 mark;
+ u32 tsflags;
+};
+
+struct ip_options_data {
+ struct ip_options_rcu opt;
+ char data[40];
+};
+
+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;
+};
+
+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 icmp_ext_hdr {
+ __u8 reserved1: 4;
+ __u8 version: 4;
+ __u8 reserved2;
+ __sum16 checksum;
+};
+
+struct icmp_extobj_hdr {
+ __be16 length;
+ __u8 class_num;
+ __u8 class_type;
+};
+
+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 sock_ee_data_rfc4884 {
+ __u16 len;
+ __u8 flags;
+ __u8 reserved;
+};
+
+struct icmp_err {
+ int errno;
+ unsigned int fatal: 1;
+};
+
+enum {
+ XFRM_DEV_OFFLOAD_UNSPECIFIED = 0,
+ XFRM_DEV_OFFLOAD_CRYPTO = 1,
+ XFRM_DEV_OFFLOAD_PACKET = 2,
+};
+
+struct xfrm_offload {
+ struct {
+ __u32 low;
+ __u32 hi;
+ } seq;
+ __u32 flags;
+ __u32 status;
+ __u32 orig_mac_len;
+ __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];
+};
+
+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_control {
+ enum skb_drop_reason (*handler)(struct sk_buff *);
+ short int error;
+};
+
+struct gre_base_hdr {
+ __be16 flags;
+ __be16 protocol;
+};
+
+struct skb_gso_cb {
+ union {
+ int mac_offset;
+ int data_offset;
+ };
+ int encap_level;
+ __wsum csum;
+ __u16 csum_start;
+};
+
+typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
+
+struct bpf_local_storage_data;
+
+struct bpf_local_storage {
+ struct bpf_local_storage_data *cache[16];
+ struct bpf_local_storage_map *smap;
+ struct hlist_head list;
+ void *owner;
+ struct callback_head rcu;
+ raw_spinlock_t lock;
+};
+
+struct bpf_mem_caches;
+
+struct bpf_mem_cache;
+
+struct bpf_mem_alloc {
+ struct bpf_mem_caches *caches;
+ struct bpf_mem_cache *cache;
+ struct obj_cgroup *objcg;
+ 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;
+};
+
+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;
+ int flags;
+};
+
+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 {
+ 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,
+};
+
+struct bpf_local_storage_map_bucket {
+ struct hlist_head list;
+ raw_spinlock_t lock;
+};
+
+struct bpf_local_storage_data {
+ struct bpf_local_storage_map *smap;
+ u8 data[0];
+};
+
+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 {
+ __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_req_v2 {
+ __u8 sdiag_family;
+ __u8 sdiag_protocol;
+ __u8 idiag_ext;
+ __u8 pad;
+ __u32 idiag_states;
+ struct inet_diag_sockid id;
+};
+
+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,
+};
+
+struct inet_diag_bc_op {
+ unsigned char code;
+ unsigned char yes;
+ short unsigned int no;
+};
+
+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_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,
+};
+
+struct inet_diag_meminfo {
+ __u32 idiag_rmem;
+ __u32 idiag_wmem;
+ __u32 idiag_fmem;
+ __u32 idiag_tmem;
+};
+
+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_handler {
+ struct module *owner;
+ 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 bpf_sk_storage_diag;
+
+struct inet_diag_dump_data {
+ struct nlattr *req_nlas[4];
+ struct bpf_sk_storage_diag *bpf_stg_diag;
+};
+
+struct sock_diag_handler {
+ struct module *owner;
+ __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 sock_diag_inet_compat {
+ struct module *owner;
+ int (*fn)(struct sk_buff *, struct nlmsghdr *);
+};
+
+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;
+};
+
+typedef void (*smp_call_func_t)(void *);
+
+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 netdev_xmit {
+ u16 recursion;
+ u8 more;
+ u8 skip_txqueue;
+};
+
+struct sd_flow_limit;
+
+struct softnet_data {
+ struct list_head poll_list;
+ struct sk_buff_head process_queue;
+ local_lock_t process_queue_bh_lock;
+ unsigned int processed;
+ unsigned int time_squeeze;
+ struct softnet_data *rps_ipi_list;
+ unsigned int received_rps;
+ bool in_net_rx_action;
+ bool in_napi_threaded_poll;
+ struct sd_flow_limit *flow_limit;
+ struct Qdisc *output_queue;
+ struct Qdisc **output_queue_tailp;
+ struct sk_buff *completion_queue;
+ struct netdev_xmit xmit;
+ long: 0;
+ 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;
+ struct sk_buff_head input_pkt_queue;
+ struct napi_struct backlog;
+ long: 64;
+ long: 64;
+ atomic_t dropped;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ spinlock_t defer_lock;
+ int defer_count;
+ int defer_ipi_scheduled;
+ struct sk_buff *defer_list;
+ long: 64;
+ long: 64;
+ long: 64;
+ call_single_data_t defer_csd;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct ip_beet_phdr {
+ __u8 nexthdr;
+ __u8 hdrlen;
+ __u8 padlen;
+ __u8 reserved;
+};
+
+enum {
+ XFRM_MODE_FLAG_TUNNEL = 1,
+};
+
+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_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 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 ip_tunnel;
+
+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_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];
+};
+
+enum {
+ BPF_F_CURRENT_NETNS = -1,
+};
+
+struct bpf_xfrm_state_opts {
+ s32 error;
+ s32 netns_id;
+ u32 mark;
+ xfrm_address_t daddr;
+ __be32 spi;
+ u8 proto;
+ u16 family;
+};
+
+enum {
+ BPF_XFRM_STATE_OPTS_SZ = 36,
+};
+
+struct seq_net_private {
+ struct net *net;
+ netns_tracker ns_tracker;
+};
+
+struct ac6_iter_state {
+ struct seq_net_private p;
+ struct net_device *dev;
+};
+
+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,
+};
+
+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,
+};
+
+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 *);
+
+enum rtnl_link_flags {
+ RTNL_FLAG_DOIT_UNLOCKED = 1,
+ RTNL_FLAG_BULK_DEL_SUPPORTED = 2,
+ RTNL_FLAG_DUMP_UNLOCKED = 4,
+ RTNL_FLAG_DUMP_SPLIT_NLM_DONE = 8,
+};
+
+struct ifaddrlblmsg {
+ __u8 ifal_family;
+ __u8 __ifal_reserved;
+ __u8 ifal_prefixlen;
+ __u8 ifal_flags;
+ __u32 ifal_index;
+ __u32 ifal_seq;
+};
+
+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 ip6addrlbl_init_table {
+ const struct in6_addr *prefix;
+ int prefixlen;
+ u32 label;
+};
+
+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 icmp6_filter {
+ __u32 data[8];
+};
+
+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 skb_tstamp_type {
+ SKB_CLOCK_REALTIME = 0,
+ SKB_CLOCK_MONOTONIC = 1,
+ SKB_CLOCK_TAI = 2,
+ __SKB_CLOCK_MAX = 2,
+};
+
+struct raw6_sock {
+ struct inet_sock inet;
+ __u32 checksum;
+ __u32 offset;
+ struct icmp6_filter filter;
+ __u32 ip6mr_table;
+ struct ipv6_pinfo inet6;
+};
+
+struct static_key_false_deferred {
+ struct static_key_false key;
+ long unsigned int timeout;
+ struct delayed_work work;
+};
+
+struct ipcm6_cookie {
+ struct sockcm_cookie sockc;
+ __s16 hlimit;
+ __s16 tclass;
+ __u16 gso_size;
+ __s8 dontfrag;
+ struct ipv6_txoptions *opt;
+};
+
+struct inet_protosw {
+ struct list_head list;
+ short unsigned int type;
+ short unsigned int protocol;
+ struct proto *prot;
+ const struct proto_ops *ops;
+ unsigned char flags;
+};
+
+struct raw_iter_state {
+ struct seq_net_private p;
+ int bucket;
+};
+
+struct raw6_frag_vec {
+ struct msghdr *msg;
+ int hlen;
+ char c[4];
+};
+
+enum xfrm_sa_dir {
+ XFRM_SA_DIR_IN = 1,
+ XFRM_SA_DIR_OUT = 2,
+};
+
+struct udp_sock {
+ struct inet_sock inet;
+ long unsigned int 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;
+ struct sk_buff_head reader_queue;
+ int forward_deficit;
+ int forward_threshold;
+ bool peeking_with_offset;
+};
+
+struct xfrm_spi_skb_cb {
+ struct xfrm_tunnel_skb_cb header;
+ unsigned int daddroff;
+ unsigned int family;
+ __be32 seq;
+};
+
+enum {
+ IP6_FH_F_FRAG = 1,
+ IP6_FH_F_AUTH = 2,
+ IP6_FH_F_SKIP_RH = 4,
+};
+
+enum rpc_msg_type {
+ RPC_CALL = 0,
+ RPC_REPLY = 1,
+};
+
+enum rpc_reply_stat {
+ RPC_MSG_ACCEPTED = 0,
+ RPC_MSG_DENIED = 1,
+};
+
+enum rpc_accept_stat {
+ RPC_SUCCESS = 0,
+ RPC_PROG_UNAVAIL = 1,
+ RPC_PROG_MISMATCH = 2,
+ RPC_PROC_UNAVAIL = 3,
+ RPC_GARBAGE_ARGS = 4,
+ RPC_SYSTEM_ERR = 5,
+ RPC_DROP_REPLY = 60000,
+};
+
+enum rpc_reject_stat {
+ RPC_MISMATCH = 0,
+ RPC_AUTH_ERROR = 1,
+};
+
+enum {
+ RPC_TASK_RUNNING = 0,
+ RPC_TASK_QUEUED = 1,
+ RPC_TASK_ACTIVE = 2,
+ RPC_TASK_NEED_XMIT = 3,
+ RPC_TASK_NEED_RECV = 4,
+ RPC_TASK_MSG_PIN_WAIT = 5,
+ RPC_TASK_SIGNALLED = 6,
+};
+
+enum rpc_display_format_t {
+ RPC_DISPLAY_ADDR = 0,
+ RPC_DISPLAY_PORT = 1,
+ RPC_DISPLAY_PROTO = 2,
+ RPC_DISPLAY_HEX_ADDR = 3,
+ RPC_DISPLAY_HEX_PORT = 4,
+ RPC_DISPLAY_NETID = 5,
+ RPC_DISPLAY_MAX = 6,
+};
+
+struct rpc_sysfs_xprt {
+ struct kobject kobject;
+ struct rpc_xprt *xprt;
+ struct rpc_xprt_switch *xprt_switch;
+};
+
+enum {
+ SUNRPC_PIPEFS_NFS_PRIO = 0,
+ SUNRPC_PIPEFS_RPC_PRIO = 1,
+};
+
+enum {
+ RPC_PIPEFS_MOUNT = 0,
+ RPC_PIPEFS_UMOUNT = 1,
+};
+
+struct rpc_sysfs_xprt_switch {
+ struct kobject kobject;
+ struct net *net;
+ struct rpc_xprt_switch *xprt_switch;
+ struct rpc_xprt *xprt;
+};
+
+struct rpc_iostats {
+ spinlock_t om_lock;
+ long unsigned int om_ops;
+ long unsigned int om_ntrans;
+ long unsigned int om_timeouts;
+ long long unsigned int om_bytes_sent;
+ long long unsigned int om_bytes_recv;
+ ktime_t om_queue;
+ ktime_t om_rtt;
+ ktime_t om_execute;
+ long unsigned int om_error_status;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct rpc_add_xprt_test {
+ void (*add_xprt_test)(struct rpc_clnt *, struct rpc_xprt *, void *);
+ void *data;
+};
+
+struct sunrpc_net {
+ struct proc_dir_entry *proc_net_rpc;
+ struct cache_detail *ip_map_cache;
+ struct cache_detail *unix_gid_cache;
+ struct cache_detail *rsc_cache;
+ struct cache_detail *rsi_cache;
+ struct super_block *pipefs_sb;
+ struct rpc_pipe *gssd_dummy;
+ struct mutex pipefs_sb_lock;
+ struct list_head all_clients;
+ spinlock_t rpc_client_lock;
+ struct rpc_clnt *rpcb_local_clnt;
+ struct rpc_clnt *rpcb_local_clnt4;
+ spinlock_t rpcb_clnt_lock;
+ unsigned int rpcb_users;
+ unsigned int rpcb_is_af_local: 1;
+ struct mutex gssp_lock;
+ struct rpc_clnt *gssp_clnt;
+ int use_gss_proxy;
+ int pipe_version;
+ atomic_t pipe_users;
+ struct proc_dir_entry *use_gssp_proc;
+ struct proc_dir_entry *gss_krb5_enctypes;
+};
+
+struct rpc_cb_add_xprt_calldata {
+ struct rpc_xprt_switch *xps;
+ struct rpc_xprt *xprt;
+};
+
+struct connect_timeout_data {
+ long unsigned int connect_timeout;
+ long unsigned int reconnect_timeout;
+};
+
+struct xdr_array2_desc;
+
+typedef int (*xdr_xcode_elem_t)(struct xdr_array2_desc *, void *);
+
+struct xdr_array2_desc {
+ unsigned int elem_size;
+ unsigned int array_len;
+ unsigned int array_maxlen;
+ xdr_xcode_elem_t xcode;
+};
+
+enum xprt_transports {
+ XPRT_TRANSPORT_UDP = 17,
+ XPRT_TRANSPORT_TCP = 6,
+ XPRT_TRANSPORT_BC_TCP = -2147483642,
+ XPRT_TRANSPORT_RDMA = 256,
+ XPRT_TRANSPORT_BC_RDMA = -2147483392,
+ XPRT_TRANSPORT_LOCAL = 257,
+ XPRT_TRANSPORT_TCP_TLS = 258,
+};
+
+typedef struct xdr_netobj gssx_buffer;
+
+typedef struct xdr_netobj utf8string;
+
+typedef struct xdr_netobj gssx_OID;
+
+struct gssx_option {
+ gssx_buffer option;
+ gssx_buffer value;
+};
+
+struct gssx_option_array {
+ u32 count;
+ struct gssx_option *data;
+};
+
+struct gssx_status {
+ u64 major_status;
+ gssx_OID mech;
+ u64 minor_status;
+ utf8string major_status_string;
+ utf8string minor_status_string;
+ gssx_buffer server_ctx;
+ struct gssx_option_array options;
+};
+
+struct gssx_call_ctx {
+ utf8string locale;
+ gssx_buffer server_ctx;
+ struct gssx_option_array options;
+};
+
+struct gssx_name {
+ gssx_buffer display_name;
+};
+
+typedef struct gssx_name gssx_name;
+
+struct gssx_cred_element {
+ gssx_name MN;
+ gssx_OID mech;
+ u32 cred_usage;
+ u64 initiator_time_rec;
+ u64 acceptor_time_rec;
+ struct gssx_option_array options;
+};
+
+struct gssx_cred_element_array {
+ u32 count;
+ struct gssx_cred_element *data;
+};
+
+struct gssx_cred {
+ gssx_name desired_name;
+ struct gssx_cred_element_array elements;
+ gssx_buffer cred_handle_reference;
+ u32 needs_release;
+};
+
+struct gssx_ctx {
+ gssx_buffer exported_context_token;
+ gssx_buffer state;
+ u32 need_release;
+ gssx_OID mech;
+ gssx_name src_name;
+ gssx_name targ_name;
+ u64 lifetime;
+ u64 ctx_flags;
+ u32 locally_initiated;
+ u32 open;
+ struct gssx_option_array options;
+};
+
+struct gssx_cb {
+ u64 initiator_addrtype;
+ gssx_buffer initiator_address;
+ u64 acceptor_addrtype;
+ gssx_buffer acceptor_address;
+ gssx_buffer application_data;
+};
+
+struct gssp_in_token {
+ struct page **pages;
+ unsigned int page_base;
+ unsigned int page_len;
+};
+
+struct gssx_arg_accept_sec_context {
+ struct gssx_call_ctx call_ctx;
+ struct gssx_ctx *context_handle;
+ struct gssx_cred *cred_handle;
+ struct gssp_in_token input_token;
+ struct gssx_cb *input_cb;
+ u32 ret_deleg_cred;
+ struct gssx_option_array options;
+ struct page **pages;
+ unsigned int npages;
+};
+
+struct gssx_res_accept_sec_context {
+ struct gssx_status status;
+ struct gssx_ctx *context_handle;
+ gssx_buffer *output_token;
+ struct gssx_option_array options;
+};
+
+struct gssp_upcall_data {
+ struct xdr_netobj in_handle;
+ struct gssp_in_token in_token;
+ struct xdr_netobj out_handle;
+ struct xdr_netobj out_token;
+ struct rpcsec_gss_oid mech_oid;
+ struct svc_cred creds;
+ int found_creds;
+ int major_status;
+ int minor_status;
+};
+
+enum {
+ GSSX_NULL = 0,
+ GSSX_INDICATE_MECHS = 1,
+ GSSX_GET_CALL_CONTEXT = 2,
+ GSSX_IMPORT_AND_CANON_NAME = 3,
+ GSSX_EXPORT_CRED = 4,
+ GSSX_IMPORT_CRED = 5,
+ GSSX_ACQUIRE_CRED = 6,
+ GSSX_STORE_CRED = 7,
+ GSSX_INIT_SEC_CONTEXT = 8,
+ GSSX_ACCEPT_SEC_CONTEXT = 9,
+ GSSX_RELEASE_HANDLE = 10,
+ GSSX_GET_MIC = 11,
+ GSSX_VERIFY = 12,
+ GSSX_WRAP = 13,
+ GSSX_UNWRAP = 14,
+ GSSX_WRAP_SIZE_LIMIT = 15,
+};
+
+struct hash_alg_common {
+ unsigned int digestsize;
+ unsigned int statesize;
+ struct crypto_alg base;
+};
+
+struct ahash_request {
+ struct crypto_async_request base;
+ unsigned int nbytes;
+ struct scatterlist *src;
+ u8 *result;
+ void *priv;
+ void *__ctx[0];
+};
+
+struct crypto_ahash {
+ bool using_shash;
+ unsigned int statesize;
+ unsigned int reqsize;
+ struct crypto_tfm base;
+};
+
+typedef unsigned int OM_uint32;
+
+struct krb5_ctx;
+
+struct gss_krb5_enctype {
+ const u32 etype;
+ const u32 ctype;
+ const char *name;
+ const char *encrypt_name;
+ const char *aux_cipher;
+ const char *cksum_name;
+ const u16 signalg;
+ const u16 sealalg;
+ const u32 cksumlength;
+ const u32 keyed_cksum;
+ const u32 keybytes;
+ const u32 keylength;
+ const u32 Kc_length;
+ const u32 Ke_length;
+ const u32 Ki_length;
+ int (*derive_key)(const struct gss_krb5_enctype *, const struct xdr_netobj *, struct xdr_netobj *, const struct xdr_netobj *, gfp_t);
+ u32 (*encrypt)(struct krb5_ctx *, u32, struct xdr_buf *, struct page **);
+ u32 (*decrypt)(struct krb5_ctx *, u32, u32, struct xdr_buf *, u32 *, u32 *);
+ u32 (*get_mic)(struct krb5_ctx *, struct xdr_buf *, struct xdr_netobj *);
+ u32 (*verify_mic)(struct krb5_ctx *, struct xdr_buf *, struct xdr_netobj *);
+ u32 (*wrap)(struct krb5_ctx *, int, struct xdr_buf *, struct page **);
+ u32 (*unwrap)(struct krb5_ctx *, int, int, struct xdr_buf *, unsigned int *, unsigned int *);
+};
+
+struct krb5_ctx {
+ int initiate;
+ u32 enctype;
+ u32 flags;
+ const struct gss_krb5_enctype *gk5e;
+ struct crypto_sync_skcipher *enc;
+ struct crypto_sync_skcipher *seq;
+ struct crypto_sync_skcipher *acceptor_enc;
+ struct crypto_sync_skcipher *initiator_enc;
+ struct crypto_sync_skcipher *acceptor_enc_aux;
+ struct crypto_sync_skcipher *initiator_enc_aux;
+ struct crypto_ahash *acceptor_sign;
+ struct crypto_ahash *initiator_sign;
+ struct crypto_ahash *initiator_integ;
+ struct crypto_ahash *acceptor_integ;
+ u8 Ksess[32];
+ u8 cksum[32];
+ atomic_t seq_send;
+ atomic64_t seq_send64;
+ time64_t endtime;
+ struct xdr_netobj mech_used;
+};
+
+struct encryptor_desc {
+ u8 iv[16];
+ struct skcipher_request *req;
+ int pos;
+ struct xdr_buf *outbuf;
+ struct page **pages;
+ struct scatterlist infrags[4];
+ struct scatterlist outfrags[4];
+ int fragno;
+ int fraglen;
+};
+
+struct decryptor_desc {
+ u8 iv[16];
+ struct skcipher_request *req;
+ struct scatterlist frags[4];
+ int fragno;
+ int fraglen;
+};
+
+enum handshake_handler_class {
+ HANDSHAKE_HANDLER_CLASS_NONE = 0,
+ HANDSHAKE_HANDLER_CLASS_TLSHD = 1,
+ HANDSHAKE_HANDLER_CLASS_MAX = 2,
+};
+
+struct handshake_net {
+ spinlock_t hn_lock;
+ int hn_pending;
+ int hn_pending_max;
+ struct list_head hn_requests;
+ long unsigned int hn_flags;
+};
+
+enum hn_flags_bits {
+ HANDSHAKE_F_NET_DRAINING = 0,
+};
+
+struct handshake_proto;
+
+struct handshake_req {
+ struct list_head hr_list;
+ struct rhash_head hr_rhash;
+ long unsigned int hr_flags;
+ const struct handshake_proto *hr_proto;
+ struct sock *hr_sk;
+ void (*hr_odestruct)(struct sock *);
+ char hr_priv[0];
+};
+
+struct handshake_proto {
+ int hp_handler_class;
+ size_t hp_privsize;
+ long unsigned int hp_flags;
+ int (*hp_accept)(struct handshake_req *, struct genl_info *, int);
+ void (*hp_done)(struct handshake_req *, unsigned int, struct genl_info *);
+ void (*hp_destroy)(struct handshake_req *);
+};
+
+enum hr_flags_bits {
+ HANDSHAKE_F_REQ_COMPLETED = 0,
+ HANDSHAKE_F_REQ_SESSION = 1,
+};
+
+typedef __be32 fdt32_t;
+
+typedef __be64 fdt64_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;
+};
+
+struct fdt_reserve_entry {
+ fdt64_t address;
+ fdt64_t size;
+};
+
+struct fdt_node_header {
+ fdt32_t tag;
+ char name[0];
+};
+
+struct fdt_property {
+ fdt32_t tag;
+ fdt32_t len;
+ fdt32_t nameoff;
+ char data[0];
+};
+
+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,
+};
+
+struct radix_tree_iter {
+ long unsigned int index;
+ long unsigned int next_index;
+ long unsigned int tags;
+ struct xa_node *node;
+};
+
+enum {
+ RADIX_TREE_ITER_TAG_MASK = 15,
+ RADIX_TREE_ITER_TAGGED = 16,
+ RADIX_TREE_ITER_CONTIG = 32,
+};
+
+typedef u64 efi_physical_addr_t;
+
+typedef void *efi_handle_t;
+
+typedef void *efi_event_t;
+
+typedef void (*efi_event_notify_t)(efi_event_t, void *);
+
+typedef enum {
+ EfiTimerCancel = 0,
+ EfiTimerPeriodic = 1,
+ EfiTimerRelative = 2,
+} EFI_TIMER_DELAY;
+
+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, long unsigned int, efi_physical_addr_t *);
+ efi_status_t (*free_pages)(efi_physical_addr_t, long unsigned int);
+ efi_status_t (*get_memory_map)(long unsigned int *, void *, long unsigned int *, long unsigned int *, u32 *);
+ efi_status_t (*allocate_pool)(int, long unsigned int, void **);
+ efi_status_t (*free_pool)(void *);
+ efi_status_t (*create_event)(u32, long unsigned int, 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)(long unsigned int, efi_event_t *, long unsigned int *);
+ 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 *, long unsigned int *, 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 *, long unsigned int, efi_handle_t *);
+ efi_status_t (*start_image)(efi_handle_t, long unsigned int *, efi_char16_t **);
+ efi_status_t (*exit)(efi_handle_t, efi_status_t, long unsigned int, efi_char16_t *);
+ efi_status_t (*unload_image)(efi_handle_t);
+ efi_status_t (*exit_boot_services)(efi_handle_t, long unsigned int);
+ void *get_next_monotonic_count;
+ efi_status_t (*stall)(long unsigned int);
+ 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 *, long unsigned int);
+ void (*set_mem)(void *, long unsigned int, 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;
+};
+
+typedef union efi_boot_services efi_boot_services_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 {
+ u16 scan_code;
+ efi_char16_t unicode_char;
+} efi_input_key_t;
+
+union efi_simple_text_input_protocol;
+
+typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_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;
+
+typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
+
+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 union {
+ struct {
+ efi_table_hdr_t hdr;
+ long unsigned int fw_vendor;
+ u32 fw_revision;
+ long unsigned int con_in_handle;
+ efi_simple_text_input_protocol_t *con_in;
+ long unsigned int con_out_handle;
+ efi_simple_text_output_protocol_t *con_out;
+ long unsigned int stderr_handle;
+ long unsigned int stderr;
+ efi_runtime_services_t *runtime;
+ efi_boot_services_t *boottime;
+ long unsigned int nr_tables;
+ long unsigned int tables;
+ };
+ efi_system_table_32_t mixed_mode;
+} efi_system_table_t;
+
+struct efi_generic_dev_path {
+ u8 type;
+ u8 sub_type;
+ u16 length;
+};
+
+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;
+
+struct efi_boot_memmap {
+ long unsigned int map_size;
+ long unsigned int desc_size;
+ u32 desc_ver;
+ long unsigned int map_key;
+ long unsigned int buff_size;
+ efi_memory_desc_t map[0];
+};
+
+struct efi_vendor_dev_path {
+ struct efi_generic_dev_path header;
+ efi_guid_t vendorguid;
+ u8 vendordata[0];
+};
+
+struct linux_efi_initrd {
+ long unsigned int base;
+ long unsigned int size;
+};
+
+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;
+};
+
+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;
+
+typedef u32 efi_tcg2_event_log_format;
+
+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));
+
+struct tdTCG_PCClientTaggedEvent {
+ u32 tagged_event_id;
+ u32 tagged_event_data_size;
+ u8 tagged_event_data[0];
+};
+
+typedef struct tdTCG_PCClientTaggedEvent TCG_PCClientTaggedEvent;
+
+typedef struct efi_tcg2_event efi_tcg2_event_t;
+
+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 struct {
+ u8 major;
+ u8 minor;
+} efi_cc_version_t;
+
+typedef struct {
+ u8 type;
+ u8 sub_type;
+} efi_cc_type_t;
+
+typedef u32 efi_cc_mr_index_t;
+
+struct efi_cc_event {
+ u32 event_size;
+ struct {
+ u32 header_size;
+ u16 header_version;
+ u32 mr_index;
+ u32 event_type;
+ } __attribute__((packed)) event_header;
+} __attribute__((packed));
+
+typedef struct efi_cc_event efi_cc_event_t;
+
+typedef u32 efi_cc_event_log_bitmap_t;
+
+typedef u32 efi_cc_event_log_format_t;
+
+typedef u32 efi_cc_event_algorithm_bitmap_t;
+
+typedef struct {
+ u8 size;
+ efi_cc_version_t structure_version;
+ efi_cc_version_t protocol_version;
+ efi_cc_event_algorithm_bitmap_t hash_algorithm_bitmap;
+ efi_cc_event_log_bitmap_t supported_event_logs;
+ efi_cc_type_t cc_type;
+} efi_cc_boot_service_cap_t;
+
+union efi_cc_protocol;
+
+typedef union efi_cc_protocol efi_cc_protocol_t;
+
+union efi_cc_protocol {
+ struct {
+ efi_status_t (*get_capability)(efi_cc_protocol_t *, efi_cc_boot_service_cap_t *);
+ efi_status_t (*get_event_log)(efi_cc_protocol_t *, efi_cc_event_log_format_t, efi_physical_addr_t *, efi_physical_addr_t *, efi_bool_t *);
+ efi_status_t (*hash_log_extend_event)(efi_cc_protocol_t *, u64, efi_physical_addr_t, u64, const efi_cc_event_t *);
+ efi_status_t (*map_pcr_to_mr_index)(efi_cc_protocol_t *, u32, efi_cc_mr_index_t *);
+ };
+ struct {
+ u32 get_capability;
+ u32 get_event_log;
+ u32 hash_log_extend_event;
+ u32 map_pcr_to_mr_index;
+ } mixed_mode;
+};
+
+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, long unsigned int *, 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;
+ u8 variable_data[0];
+} __attribute__((packed)) efi_load_option_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 efi_status_t (*efi_exit_boot_map_processing)(struct efi_boot_memmap *, void *);
+
+enum efistub_event_type {
+ EFISTUB_EVT_INITRD = 0,
+ EFISTUB_EVT_LOAD_OPTIONS = 1,
+ EFISTUB_EVT_COUNT = 2,
+};
+
+union efistub_event {
+ efi_tcg2_event_t tcg2_data;
+ efi_cc_event_t cc_data;
+};
+
+struct efistub_measured_event {
+ union efistub_event event_data;
+ TCG_PCClientTaggedEvent tagged_event;
+} __attribute__((packed));
+
+typedef initcall_t initcall_entry_t;
+
+typedef int (*parse_unknown_fn)(char *, char *, const char *, void *);
+
+struct blacklist_entry {
+ struct list_head next;
+ char *buf;
+};
+
+struct stackframe {
+ long unsigned int fp;
+ long unsigned int ra;
+};
+
+union reg_data {
+ u8 data_bytes[8];
+ ulong data_ulong;
+ u64 data_u64;
+};
+
+typedef bool (*smp_cond_func_t)(int, void *);
+
+struct __user_cap_header_struct {
+ __u32 version;
+ int pid;
+};
+
+typedef struct __user_cap_header_struct *cap_user_header_t;
+
+struct __user_cap_data_struct {
+ __u32 effective;
+ __u32 permitted;
+ __u32 inheritable;
+};
+
+typedef struct __user_cap_data_struct *cap_user_data_t;
+
+struct wq_flusher;
+
+struct worker;
+
+struct pool_workqueue;
+
+struct wq_device;
+
+struct wq_node_nr_active;
+
+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 max_active;
+ int min_active;
+ int saved_max_active;
+ int saved_min_active;
+ struct workqueue_attrs *unbound_attrs;
+ struct pool_workqueue *dfl_pwq;
+ struct wq_device *wq_dev;
+ char name[32];
+ struct callback_head rcu;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ unsigned int flags;
+ struct pool_workqueue **cpu_pwq;
+ struct wq_node_nr_active *node_nr_active[0];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct execute_work {
+ struct work_struct work;
+};
+
+enum wq_consts {
+ WQ_MAX_ACTIVE = 512,
+ WQ_UNBOUND_MAX_ACTIVE = 512,
+ WQ_DFL_ACTIVE = 256,
+ WQ_DFL_MIN_ACTIVE = 8,
+};
+
+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;
+ long unsigned int last_active;
+ unsigned int flags;
+ int id;
+ char desc[32];
+ 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];
+ bool plugged;
+ int nr_active;
+ struct list_head inactive_works;
+ struct list_head pending_node;
+ 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;
+};
+
+struct worker_pool {
+ raw_spinlock_t lock;
+ int cpu;
+ int node;
+ int id;
+ unsigned int flags;
+ long unsigned int 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 ida worker_ida;
+ struct workqueue_attrs *attrs;
+ struct hlist_node hash_node;
+ int refcnt;
+ struct callback_head rcu;
+};
+
+enum worker_pool_flags {
+ POOL_BH = 1,
+ POOL_MANAGER_ACTIVE = 2,
+ POOL_DISASSOCIATED = 4,
+ POOL_BH_DRAINING = 8,
+};
+
+enum worker_flags {
+ WORKER_DIE = 2,
+ WORKER_IDLE = 4,
+ WORKER_PREP = 8,
+ WORKER_CPU_INTENSIVE = 64,
+ WORKER_UNBOUND = 128,
+ WORKER_REBOUND = 256,
+ WORKER_NOT_RUNNING = 456,
+};
+
+enum work_cancel_flags {
+ WORK_CANCEL_DELAYED = 1,
+ WORK_CANCEL_DISABLE = 2,
+};
+
+enum wq_internal_consts {
+ 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 = 32,
+ WORKER_ID_LEN = 42,
+};
+
+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,
+};
+
+struct wq_flusher {
+ struct list_head list;
+ int flush_color;
+ struct completion done;
+};
+
+struct wq_node_nr_active {
+ int max;
+ atomic_t nr;
+ raw_spinlock_t lock;
+ struct list_head pending_pwqs;
+};
+
+struct wq_device {
+ struct workqueue_struct *wq;
+ struct device dev;
+};
+
+struct wq_pod_type {
+ int nr_pods;
+ cpumask_var_t *pod_cpus;
+ int *pod_node;
+ int *cpu_pod;
+};
+
+struct work_offq_data {
+ u32 pool_id;
+ u32 disable;
+ u32 flags;
+};
+
+struct wq_drain_dead_softirq_work {
+ struct work_struct work;
+ struct worker_pool *pool;
+ struct completion done;
+};
+
+struct wq_barrier {
+ struct work_struct work;
+ struct completion done;
+ struct task_struct *task;
+};
+
+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 pr_cont_work_struct {
+ bool comma;
+ work_func_t func;
+ long int ctr;
+};
+
+struct work_for_cpu {
+ struct work_struct work;
+ long int (*fn)(void *);
+ void *arg;
+ long int ret;
+};
+
+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;
+};
+
+struct pin_cookie {};
+
+typedef struct {
+ void *lock;
+ long unsigned int flags;
+} class_irqsave_t;
+
+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;
+ bool overloaded;
+ bool 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;
+ struct perf_domain *pd;
+};
+
+struct sched_param {
+ int sched_priority;
+};
+
+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 min_vruntime;
+ struct rb_root_cached tasks_timeline;
+ struct sched_entity *curr;
+ struct sched_entity *next;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct sched_avg avg;
+ struct {
+ raw_spinlock_t lock;
+ int nr;
+ long unsigned int load_avg;
+ long unsigned int util_avg;
+ long unsigned int runnable_avg;
+ long: 64;
+ } removed;
+ u64 last_update_tg_load_avg;
+ long unsigned int tg_load_avg_contrib;
+ long int propagate;
+ long int prop_runnable_sum;
+ long unsigned int h_load;
+ u64 last_h_load_update;
+ struct sched_entity *h_load_next;
+ struct rq *rq;
+ int on_list;
+ struct list_head leaf_cfs_rq_list;
+ struct task_group *tg;
+ int idle;
+ int runtime_enabled;
+ s64 runtime_remaining;
+ u64 throttled_pelt_idle;
+ u64 throttled_clock;
+ u64 throttled_clock_pelt;
+ u64 throttled_clock_pelt_time;
+ u64 throttled_clock_self;
+ u64 throttled_clock_self_time;
+ int throttled;
+ int throttle_count;
+ struct list_head throttled_list;
+ struct list_head throttled_csd_list;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct rt_prio_array {
+ long unsigned int 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;
+ bool overloaded;
+ struct plist_head pushable_tasks;
+ int rt_queued;
+ int rt_throttled;
+ u64 rt_time;
+ u64 rt_runtime;
+ raw_spinlock_t rt_runtime_lock;
+ unsigned int rt_nr_boosted;
+ struct rq *rq;
+ struct task_group *tg;
+};
+
+struct dl_rq {
+ struct rb_root_cached root;
+ unsigned int dl_nr_running;
+ struct {
+ u64 curr;
+ u64 next;
+ } earliest_dl;
+ bool 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;
+ long unsigned int caller;
+ void *arg;
+ struct cpu_stop_done *done;
+};
+
+struct sched_domain;
+
+struct balance_callback;
+
+struct cpuidle_state;
+
+struct rq {
+ raw_spinlock_t __lock;
+ unsigned int nr_running;
+ long unsigned int last_blocked_load_update_tick;
+ unsigned int has_blocked_load;
+ long: 64;
+ 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;
+ struct cfs_rq cfs;
+ struct rt_rq rt;
+ struct dl_rq dl;
+ struct sched_dl_entity fair_server;
+ struct list_head leaf_cfs_rq_list;
+ struct list_head *tmp_alone_branch;
+ unsigned int nr_uninterruptible;
+ struct task_struct *curr;
+ struct sched_dl_entity *dl_server;
+ struct task_struct *idle;
+ struct task_struct *stop;
+ long unsigned int next_balance;
+ struct mm_struct *prev_mm;
+ unsigned int clock_update_flags;
+ u64 clock;
+ u64 clock_task;
+ u64 clock_pelt;
+ long unsigned int 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 *sd;
+ long unsigned int cpu_capacity;
+ struct balance_callback *balance_callback;
+ unsigned char nohz_idle_balance;
+ unsigned char idle_balance;
+ long unsigned int 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;
+ struct sched_avg avg_rt;
+ struct sched_avg avg_dl;
+ u64 idle_stamp;
+ u64 avg_idle;
+ u64 max_idle_balance_cost;
+ struct rcuwait hotplug_wait;
+ long unsigned int calc_load_update;
+ long int calc_load_active;
+ long: 64;
+ long: 64;
+ call_single_data_t hrtick_csd;
+ struct hrtimer hrtick_timer;
+ ktime_t hrtick_time;
+ struct cpuidle_state *idle_state;
+ unsigned int nr_pinned;
+ unsigned int push_busy;
+ struct cpu_stop_work push_work;
+ cpumask_var_t scratch_mask;
+ long: 64;
+ long: 64;
+ call_single_data_t cfsb_csd;
+ struct list_head cfsb_csd_list;
+ long: 64;
+ long: 64;
+};
+
+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 cfs_bandwidth {
+ raw_spinlock_t lock;
+ ktime_t period;
+ u64 quota;
+ u64 runtime;
+ u64 burst;
+ u64 runtime_snap;
+ s64 hierarchical_quota;
+ u8 idle;
+ u8 period_active;
+ u8 slack_started;
+ struct hrtimer period_timer;
+ struct hrtimer slack_timer;
+ struct list_head throttled_cfs_rq;
+ int nr_periods;
+ int nr_throttled;
+ int nr_burst;
+ u64 throttled_time;
+ u64 burst_time;
+};
+
+struct task_group {
+ struct cgroup_subsys_state css;
+ int idle;
+ struct sched_entity **se;
+ struct cfs_rq **cfs_rq;
+ long unsigned int shares;
+ long: 64;
+ long: 64;
+ atomic_long_t load_avg;
+ struct sched_rt_entity **rt_se;
+ struct rt_rq **rt_rq;
+ struct rt_bandwidth rt_bandwidth;
+ 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;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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_CLUSTER = 256,
+ SD_SHARE_LLC = 512,
+ SD_SERIALIZE = 1024,
+ SD_ASYM_PACKING = 2048,
+ SD_PREFER_SIBLING = 4096,
+ SD_OVERLAP = 8192,
+ SD_NUMA = 16384,
+};
+
+struct sched_domain_shared {
+ atomic_t ref;
+ atomic_t nr_busy_cpus;
+ int has_idle_cores;
+ int nr_idle_scan;
+};
+
+struct sched_group;
+
+struct sched_domain {
+ struct sched_domain *parent;
+ struct sched_domain *child;
+ struct sched_group *groups;
+ long unsigned int min_interval;
+ long unsigned int 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;
+ long unsigned int last_balance;
+ unsigned int balance_interval;
+ unsigned int nr_balance_failed;
+ u64 max_newidle_lb_cost;
+ long unsigned int last_decay_max_lb_cost;
+ char *name;
+ union {
+ void *private;
+ struct callback_head rcu;
+ };
+ struct sched_domain_shared *shared;
+ unsigned int span_weight;
+ long unsigned int 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;
+ long unsigned int cpumask[0];
+};
+
+struct sched_group_capacity {
+ atomic_t ref;
+ long unsigned int capacity;
+ long unsigned int min_capacity;
+ long unsigned int max_capacity;
+ long unsigned int next_update;
+ int imbalance;
+ int id;
+ long unsigned int cpumask[0];
+};
+
+struct cpuidle_state_usage {
+ long long unsigned int disable;
+ long long unsigned int usage;
+ u64 time_ns;
+ long long unsigned int above;
+ long long unsigned int below;
+ long long unsigned int rejected;
+ long long unsigned int s2idle_usage;
+ long long unsigned int s2idle_time;
+};
+
+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_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;
+};
+
+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;
+};
+
+struct update_util_data {
+ void (*func)(struct update_util_data *, u64, unsigned int);
+};
+
+struct em_perf_state {
+ long unsigned int performance;
+ long unsigned int frequency;
+ long unsigned int power;
+ long unsigned int cost;
+ long unsigned int flags;
+};
+
+struct em_perf_table {
+ struct callback_head rcu;
+ struct kref kref;
+ struct em_perf_state state[0];
+};
+
+struct em_perf_domain {
+ struct em_perf_table *em_table;
+ int nr_perf_states;
+ long unsigned int flags;
+ long unsigned int cpus[0];
+};
+
+enum s2idle_states {
+ S2IDLE_STATE_NONE = 0,
+ S2IDLE_STATE_ENTER = 1,
+ S2IDLE_STATE_WAKE = 2,
+};
+
+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 cpudl_item {
+ u64 dl;
+ int cpu;
+ int idx;
+};
+
+typedef int (*tg_visitor)(struct task_group *, void *);
+
+struct balance_callback {
+ struct balance_callback *next;
+ void (*func)(struct rq *);
+};
+
+struct perf_domain {
+ struct em_perf_domain *em_pd;
+ struct perf_domain *next;
+ struct callback_head rcu;
+};
+
+struct rq_flags {
+ long unsigned int flags;
+ struct pin_cookie cookie;
+ unsigned int clock_update_flags;
+};
+
+typedef struct {
+ struct task_struct *lock;
+ struct rq *rq;
+ struct rq_flags rf;
+} class_task_rq_lock_t;
+
+typedef struct {
+ struct rq *lock;
+ struct rq_flags rf;
+} class_rq_lock_t;
+
+enum {
+ __SCHED_FEAT_PLACE_LAG = 0,
+ __SCHED_FEAT_PLACE_DEADLINE_INITIAL = 1,
+ __SCHED_FEAT_PLACE_REL_DEADLINE = 2,
+ __SCHED_FEAT_RUN_TO_PARITY = 3,
+ __SCHED_FEAT_PREEMPT_SHORT = 4,
+ __SCHED_FEAT_NEXT_BUDDY = 5,
+ __SCHED_FEAT_CACHE_HOT_BUDDY = 6,
+ __SCHED_FEAT_DELAY_DEQUEUE = 7,
+ __SCHED_FEAT_DELAY_ZERO = 8,
+ __SCHED_FEAT_WAKEUP_PREEMPTION = 9,
+ __SCHED_FEAT_HRTICK = 10,
+ __SCHED_FEAT_HRTICK_DL = 11,
+ __SCHED_FEAT_DOUBLE_TICK = 12,
+ __SCHED_FEAT_NONTASK_CAPACITY = 13,
+ __SCHED_FEAT_TTWU_QUEUE = 14,
+ __SCHED_FEAT_SIS_UTIL = 15,
+ __SCHED_FEAT_WARN_DOUBLE_CLOCK = 16,
+ __SCHED_FEAT_RT_PUSH_IPI = 17,
+ __SCHED_FEAT_RT_RUNTIME_SHARE = 18,
+ __SCHED_FEAT_LB_MIN = 19,
+ __SCHED_FEAT_ATTACH_AGE_LOAD = 20,
+ __SCHED_FEAT_WA_IDLE = 21,
+ __SCHED_FEAT_WA_WEIGHT = 22,
+ __SCHED_FEAT_WA_BIAS = 23,
+ __SCHED_FEAT_UTIL_EST = 24,
+ __SCHED_FEAT_LATENCY_WARN = 25,
+ __SCHED_FEAT_NR = 26,
+};
+
+struct affinity_context {
+ const struct cpumask *new_mask;
+ struct cpumask *user_mask;
+ unsigned int flags;
+};
+
+typedef struct {
+ struct rq *lock;
+ struct rq *lock2;
+} class_double_rq_lock_t;
+
+struct idle_timer {
+ struct hrtimer timer;
+ int done;
+};
+
+typedef struct task_group *rt_rq_iter_t;
+
+struct rt_schedulable_data {
+ struct task_group *tg;
+ u64 rt_period;
+ u64 rt_runtime;
+};
+
+enum dl_bw_request {
+ dl_bw_req_check_overflow = 0,
+ dl_bw_req_alloc = 1,
+ dl_bw_req_free = 2,
+};
+
+typedef struct task_struct *class_find_get_task_t;
+
+struct nbcon_state {
+ union {
+ unsigned int atom;
+ struct {
+ unsigned int prio: 2;
+ unsigned int req_prio: 2;
+ unsigned int unsafe: 1;
+ unsigned int unsafe_takeover: 1;
+ unsigned int cpu: 24;
+ };
+ };
+};
+
+struct printk_buffers {
+ char outbuf[2048];
+ char scratchbuf[1024];
+};
+
+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_seq;
+};
+
+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 console_flush_type {
+ bool nbcon_atomic;
+ bool nbcon_offload;
+ bool legacy_direct;
+ bool legacy_offload;
+};
+
+struct printk_message {
+ struct printk_buffers *pbufs;
+ unsigned int outbuf_len;
+ u64 seq;
+ long unsigned int dropped;
+};
+
+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 printk_record {
+ struct printk_info *info;
+ char *text_buf;
+ unsigned int text_buf_size;
+};
+
+struct prb_data_blk_lpos {
+ long unsigned int begin;
+ long unsigned int next;
+};
+
+struct prb_desc {
+ atomic_long_t state_var;
+ struct prb_data_blk_lpos text_blk_lpos;
+};
+
+enum {
+ AFFINITY = 0,
+ AFFINITY_LIST = 1,
+ EFFECTIVE = 2,
+ EFFECTIVE_LIST = 3,
+};
+
+struct cpumap {
+ unsigned int available;
+ unsigned int allocated;
+ unsigned int managed;
+ unsigned int managed_allocated;
+ bool initialized;
+ bool online;
+ long unsigned int *managed_map;
+ long unsigned int alloc_map[0];
+};
+
+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 *maps;
+ long unsigned int *system_map;
+ long unsigned int scratch_map[0];
+};
+
+struct dma_coherent_mem {
+ void *virt_base;
+ dma_addr_t device_base;
+ long unsigned int pfn_base;
+ int size;
+ long unsigned int *bitmap;
+ spinlock_t spinlock;
+ bool use_dev_dma_pfn_offset;
+};
+
+struct reserved_mem_ops;
+
+struct reserved_mem {
+ const char *name;
+ long unsigned int fdt_node;
+ 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 *);
+};
+
+typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
+
+struct ptrace_sud_config {
+ __u64 mode;
+ __u64 selector;
+ __u64 offset;
+ __u64 len;
+};
+
+struct load_info {
+ const char *name;
+ struct module *mod;
+ Elf64_Ehdr *hdr;
+ long unsigned int len;
+ Elf64_Shdr *sechdrs;
+ char *secstrings;
+ char *strtab;
+ long unsigned int symoffs;
+ long unsigned int stroffs;
+ long unsigned int init_typeoffs;
+ long unsigned int core_typeoffs;
+ bool sig_ok;
+ long unsigned int 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 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 timer_list_iter {
+ int cpu;
+ bool second_pass;
+ u64 now;
+};
+
+enum tick_broadcast_mode {
+ TICK_BROADCAST_OFF = 0,
+ TICK_BROADCAST_ON = 1,
+ TICK_BROADCAST_FORCE = 2,
+};
+
+enum tick_broadcast_state {
+ TICK_BROADCAST_EXIT = 0,
+ TICK_BROADCAST_ENTER = 1,
+};
+
+struct tmigr_event {
+ struct timerqueue_node nextevt;
+ unsigned int cpu;
+ bool ignore;
+};
+
+struct tmigr_group {
+ raw_spinlock_t lock;
+ struct tmigr_group *parent;
+ struct tmigr_event groupevt;
+ u64 next_expiry;
+ struct timerqueue_head events;
+ atomic_t migr_state;
+ unsigned int level;
+ int numa_node;
+ unsigned int num_children;
+ u8 groupmask;
+ struct list_head list;
+};
+
+struct tmigr_cpu {
+ raw_spinlock_t lock;
+ bool online;
+ bool idle;
+ bool remote;
+ struct tmigr_group *tmgroup;
+ u8 groupmask;
+ u64 wakeup;
+ struct tmigr_event cpuevt;
+};
+
+union tmigr_state {
+ u32 state;
+ struct {
+ u8 active;
+ u8 migrator;
+ u16 seq;
+ };
+};
+
+struct tmigr_walk {
+ u64 nextexp;
+ u64 firstexp;
+ struct tmigr_event *evt;
+ u8 childmask;
+ bool remote;
+ long unsigned int basej;
+ u64 now;
+ bool check;
+ bool tmc_active;
+};
+
+typedef bool (*up_f)(struct tmigr_group *, struct tmigr_group *, struct tmigr_walk *);
+
+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;
+};
+
+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 *);
+
+typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id, const struct bpf_prog *);
+
+enum bpf_iter_feature {
+ BPF_ITER_RESCHED = 1,
+};
+
+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;
+};
+
+struct kallsym_iter {
+ loff_t pos;
+ loff_t pos_mod_end;
+ loff_t pos_ftrace_mod_end;
+ loff_t pos_bpf_end;
+ long unsigned int value;
+ unsigned int nameoff;
+ char type;
+ char name[512];
+ char module_name[56];
+ int exported;
+ int show_value;
+};
+
+struct bpf_iter__ksym {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct kallsym_iter *ksym;
+ };
+};
+
+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 audit_fsnotify_mark {
+ dev_t dev;
+ long unsigned int ino;
+ char *path;
+ struct fsnotify_mark mark;
+ struct audit_krule *rule;
+};
+
+struct audit_entry {
+ struct list_head list;
+ struct callback_head rcu;
+ struct audit_krule rule;
+};
+
+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,
+};
+
+struct smp_hotplug_thread {
+ struct task_struct **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 bpf_mount_opts {
+ kuid_t uid;
+ kgid_t gid;
+ umode_t mode;
+ u64 delegate_cmds;
+ u64 delegate_maps;
+ u64 delegate_progs;
+ u64 delegate_attachs;
+};
+
+struct bpf_iter_seq_map_info {
+ u32 map_id;
+};
+
+struct bpf_iter__bpf_map {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct bpf_map *map;
+ };
+};
+
+struct pcpu_freelist_node;
+
+struct pcpu_freelist_head {
+ struct pcpu_freelist_node *first;
+ raw_spinlock_t lock;
+};
+
+struct pcpu_freelist_node {
+ struct pcpu_freelist_node *next;
+};
+
+struct pcpu_freelist {
+ struct pcpu_freelist_head *freelist;
+ struct pcpu_freelist_head extralist;
+};
+
+struct bpf_lpm_trie_key_hdr {
+ __u32 prefixlen;
+};
+
+struct bpf_lpm_trie_key_u8 {
+ union {
+ struct bpf_lpm_trie_key_hdr hdr;
+ __u32 prefixlen;
+ };
+ __u8 data[0];
+};
+
+struct lpm_trie_node {
+ struct callback_head rcu;
+ struct lpm_trie_node *child[2];
+ u32 prefixlen;
+ u32 flags;
+ u8 data[0];
+};
+
+struct lpm_trie {
+ struct bpf_map map;
+ struct lpm_trie_node *root;
+ size_t n_entries;
+ size_t max_prefixlen;
+ size_t data_size;
+ 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_tuple {
+ struct bpf_prog *prog;
+ struct bpf_link *link;
+};
+
+struct mini_Qdisc {
+ struct tcf_proto *filter_list;
+ struct tcf_block *block;
+ struct gnet_stats_basic_sync *cpu_bstats;
+ struct gnet_stats_queue *cpu_qstats;
+ long unsigned int rcu_state;
+};
+
+struct tcx_entry {
+ struct mini_Qdisc *miniq;
+ struct bpf_mprog_bundle bundle;
+ u32 miniq_active;
+ struct callback_head rcu;
+};
+
+struct tcx_link {
+ struct bpf_link link;
+ struct net_device *dev;
+ u32 location;
+};
+
+struct bpf_dynptr {
+ __u64 __opaque[2];
+};
+
+struct bpf_dynptr_kern {
+ void *data;
+ u32 size;
+ u32 offset;
+};
+
+struct bpf_crypto_type {
+ void * (*alloc_tfm)(const char *);
+ void (*free_tfm)(void *);
+ int (*has_algo)(const char *);
+ int (*setkey)(void *, const u8 *, unsigned int);
+ int (*setauthsize)(void *, unsigned int);
+ int (*encrypt)(void *, const u8 *, u8 *, unsigned int, u8 *);
+ int (*decrypt)(void *, const u8 *, u8 *, unsigned int, u8 *);
+ unsigned int (*ivsize)(void *);
+ unsigned int (*statesize)(void *);
+ u32 (*get_flags)(void *);
+ struct module *owner;
+ char name[14];
+};
+
+struct bpf_crypto_type_list {
+ const struct bpf_crypto_type *type;
+ struct list_head list;
+};
+
+struct bpf_crypto_params {
+ char type[14];
+ u8 reserved[2];
+ char algo[128];
+ u8 key[256];
+ u32 key_len;
+ u32 authsize;
+};
+
+struct bpf_crypto_ctx {
+ const struct bpf_crypto_type *type;
+ void *tfm;
+ u32 siv_len;
+ struct callback_head rcu;
+ refcount_t usage;
+};
+
+struct static_key_mod {
+ struct static_key_mod *next;
+ struct jump_entry *entries;
+ struct module *mod;
+};
+
+struct static_key_deferred {
+ struct static_key key;
+ long unsigned int timeout;
+ struct delayed_work work;
+};
+
+enum rseq_cpu_id_state {
+ RSEQ_CPU_ID_UNINITIALIZED = -1,
+ RSEQ_CPU_ID_REGISTRATION_FAILED = -2,
+};
+
+enum rseq_flags {
+ RSEQ_FLAG_UNREGISTER = 1,
+};
+
+enum rseq_cs_flags {
+ RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = 1,
+ RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = 2,
+ RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = 4,
+};
+
+struct rseq_cs {
+ __u32 version;
+ __u32 flags;
+ __u64 start_ip;
+ __u64 post_commit_offset;
+ __u64 abort_ip;
+};
+
+struct mem_cgroup_reclaim_cookie {
+ pg_data_t *pgdat;
+ int generation;
+};
+
+enum pageblock_bits {
+ PB_migrate = 0,
+ PB_migrate_end = 2,
+ PB_migrate_skip = 3,
+ NR_PAGEBLOCK_BITS = 4,
+};
+
+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,
+};
+
+struct alloc_context {
+ struct zonelist *zonelist;
+ nodemask_t *nodemask;
+ struct zoneref *preferred_zoneref;
+ int migratetype;
+ enum zone_type highest_zoneidx;
+ bool spread_dirty_pages;
+};
+
+typedef enum {
+ ISOLATE_ABORT = 0,
+ ISOLATE_NONE = 1,
+ ISOLATE_SUCCESS = 2,
+} isolate_migrate_t;
+
+struct encoded_page;
+
+struct mempolicy {};
+
+enum mminit_level {
+ MMINIT_WARNING = 0,
+ MMINIT_VERIFY = 1,
+ MMINIT_TRACE = 2,
+};
+
+enum vm_stat_item {
+ NR_DIRTY_THRESHOLD = 0,
+ NR_DIRTY_BG_THRESHOLD = 1,
+ NR_MEMMAP_PAGES = 2,
+ NR_MEMMAP_BOOT_PAGES = 3,
+ NR_VM_STAT_ITEMS = 4,
+};
+
+enum {
+ CSS_TASK_ITER_PROCS = 1,
+ CSS_TASK_ITER_THREADED = 2,
+ CSS_TASK_ITER_SKIPPED = 65536,
+};
+
+struct lruvec_stats_percpu {
+ long int state[30];
+ long int state_prev[30];
+};
+
+struct lruvec_stats {
+ long int state[30];
+ long int state_local[30];
+ long int state_pending[30];
+};
+
+struct memcg_vmstats {
+ long int state[37];
+ long unsigned int events[15];
+ long int state_local[37];
+ long unsigned int events_local[15];
+ long int state_pending[37];
+ long unsigned int events_pending[15];
+ atomic64_t stats_updates;
+};
+
+struct memcg_vmstats_percpu {
+ unsigned int stats_updates;
+ struct memcg_vmstats_percpu *parent;
+ struct memcg_vmstats *vmstats;
+ long int state[37];
+ long unsigned int events[15];
+ long int state_prev[37];
+ long unsigned int events_prev[15];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct slabobj_ext {
+ struct obj_cgroup *objcg;
+};
+
+struct match_token {
+ int token;
+ const char *pattern;
+};
+
+enum {
+ MAX_OPT_ARGS = 3,
+};
+
+typedef struct {
+ char *from;
+ char *to;
+} substring_t;
+
+enum oom_constraint {
+ CONSTRAINT_NONE = 0,
+ CONSTRAINT_CPUSET = 1,
+ CONSTRAINT_MEMORY_POLICY = 2,
+ CONSTRAINT_MEMCG = 3,
+};
+
+struct oom_control {
+ struct zonelist *zonelist;
+ nodemask_t *nodemask;
+ struct mem_cgroup *memcg;
+ const gfp_t gfp_mask;
+ const int order;
+ long unsigned int totalpages;
+ struct task_struct *chosen;
+ long int chosen_points;
+ enum oom_constraint constraint;
+};
+
+struct memory_stat {
+ const char *name;
+ unsigned int idx;
+};
+
+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;
+ long unsigned int flags;
+};
+
+enum {
+ MEMORY_RECLAIM_SWAPPINESS = 0,
+ MEMORY_RECLAIM_NULL = 1,
+};
+
+struct uncharge_gather {
+ struct mem_cgroup *memcg;
+ long unsigned int nr_memory;
+ long unsigned int pgpgout;
+ long unsigned int nr_kmem;
+ int nid;
+};
+
+typedef short unsigned int ushort;
+
+enum mm_cid_state {
+ MM_CID_UNSET = 4294967295,
+ MM_CID_LAZY_PUT = 2147483648,
+};
+
+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;
+};
+
+struct mmu_table_batch {
+ struct callback_head rcu;
+ unsigned int nr;
+ void *tables[0];
+};
+
+struct mmu_gather_batch {
+ struct mmu_gather_batch *next;
+ unsigned int nr;
+ unsigned int max;
+ struct encoded_page *encoded_pages[0];
+};
+
+struct mmu_gather {
+ struct mm_struct *mm;
+ struct mmu_table_batch *batch;
+ long unsigned int start;
+ long unsigned int 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 open_flags {
+ int open_flag;
+ umode_t mode;
+ int acc_mode;
+ int intent;
+ int lookup_flags;
+};
+
+struct user_arg_ptr {
+ bool is_compat;
+ union {
+ const char * const *native;
+ const compat_uptr_t *compat;
+ } ptr;
+};
+
+struct wait_bit_queue_entry {
+ struct wait_bit_key key;
+ struct wait_queue_entry wq_entry;
+};
+
+enum wb_state {
+ WB_registered = 0,
+ WB_writeback_running = 1,
+ WB_has_dirty_io = 2,
+ WB_start_all = 3,
+};
+
+struct wb_writeback_work {
+ long int 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;
+};
+
+struct inode_switch_wbs_context {
+ struct rcu_work work;
+ struct bdi_writeback *new_wb;
+ struct inode *inodes[0];
+};
+
+typedef int __kernel_daddr_t;
+
+struct ustat {
+ __kernel_daddr_t f_tfree;
+ long unsigned int f_tinode;
+ char f_fname[6];
+ char f_fpack[6];
+};
+
+typedef u32 compat_ino_t;
+
+typedef s32 compat_daddr_t;
+
+typedef __kernel_fsid_t compat_fsid_t;
+
+struct compat_statfs {
+ compat_int_t f_type;
+ compat_int_t f_bsize;
+ compat_int_t f_blocks;
+ compat_int_t f_bfree;
+ compat_int_t f_bavail;
+ compat_int_t f_files;
+ compat_int_t f_ffree;
+ compat_fsid_t f_fsid;
+ compat_int_t f_namelen;
+ compat_int_t f_frsize;
+ compat_int_t f_flags;
+ compat_int_t f_spare[4];
+};
+
+struct compat_ustat {
+ compat_daddr_t f_tfree;
+ compat_ino_t f_tinode;
+ char f_fname[6];
+ char f_fpack[6];
+};
+
+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];
+};
+
+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];
+};
+
+struct stashed_operations {
+ void (*put_data)(void *);
+ int (*init_inode)(struct inode *, void *);
+};
+
+struct inotify_event_info {
+ struct fsnotify_event fse;
+ u32 mask;
+ int wd;
+ u32 sync_cookie;
+ int name_len;
+ char name[0];
+};
+
+typedef unsigned int __kernel_uid_t;
+
+typedef unsigned int __kernel_gid_t;
+
+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 elf64_note {
+ Elf64_Word n_namesz;
+ Elf64_Word n_descsz;
+ Elf64_Word n_type;
+};
+
+typedef struct user_regs_struct elf_gregset_t;
+
+struct elf_siginfo {
+ int si_signo;
+ int si_code;
+ int si_errno;
+};
+
+struct elf_prstatus_common {
+ struct elf_siginfo pr_info;
+ short int pr_cursig;
+ long unsigned int pr_sigpend;
+ long unsigned int 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;
+};
+
+struct elf_prstatus {
+ struct elf_prstatus_common common;
+ elf_gregset_t pr_reg;
+ int pr_fpvalid;
+};
+
+struct elf_prpsinfo {
+ char pr_state;
+ char pr_sname;
+ char pr_zomb;
+ char pr_nice;
+ long unsigned int 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 elf_thread_core_info___2 {
+ struct elf_thread_core_info___2 *next;
+ struct task_struct *task;
+ struct elf_prstatus prstatus;
+ struct memelfnote notes[0];
+};
+
+struct elf_note_info___2 {
+ struct elf_thread_core_info___2 *thread;
+ struct memelfnote psinfo;
+ struct memelfnote signote;
+ struct memelfnote auxv;
+ struct memelfnote files;
+ siginfo_t csigdata;
+ size_t size;
+ int thread_notes;
+};
+
+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;
+};
+
+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;
+};
+
+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 *);
+};
+
+typedef long int intptr_t;
+
+struct seccomp_data {
+ int nr;
+ __u32 arch;
+ __u64 instruction_pointer;
+ __u64 args[6];
+};
+
+struct syscall_info {
+ __u64 sp;
+ struct seccomp_data data;
+};
+
+struct proc_timens_offset {
+ int clockid;
+ struct timespec64 val;
+};
+
+enum resctrl_conf_type {
+ CDP_NONE = 0,
+ CDP_CODE = 1,
+ CDP_DATA = 2,
+};
+
+typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
+
+enum proc_mem_force {
+ PROC_MEM_FORCE_ALWAYS = 0,
+ PROC_MEM_FORCE_PTRACE = 1,
+ PROC_MEM_FORCE_NEVER = 2,
+};
+
+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 {
+ long unsigned int start;
+ long unsigned int end;
+ fmode_t mode;
+};
+
+struct timers_private {
+ struct pid *pid;
+ struct task_struct *task;
+ struct sighand_struct *sighand;
+ struct pid_namespace *ns;
+ long unsigned int flags;
+};
+
+struct tgid_iter {
+ unsigned int tgid;
+ struct task_struct *task;
+};
+
+typedef unsigned int iov_iter_extraction_t;
+
+enum netfs_read_trace {
+ netfs_read_trace_dio_read = 0,
+ netfs_read_trace_expanded = 1,
+ netfs_read_trace_readahead = 2,
+ netfs_read_trace_readpage = 3,
+ netfs_read_trace_read_gaps = 4,
+ netfs_read_trace_prefetch_for_write = 5,
+ netfs_read_trace_write_begin = 6,
+} __attribute__((mode(byte)));
+
+enum netfs_rreq_trace {
+ netfs_rreq_trace_assess = 0,
+ netfs_rreq_trace_copy = 1,
+ netfs_rreq_trace_collect = 2,
+ netfs_rreq_trace_done = 3,
+ netfs_rreq_trace_free = 4,
+ netfs_rreq_trace_redirty = 5,
+ netfs_rreq_trace_resubmit = 6,
+ netfs_rreq_trace_set_pause = 7,
+ netfs_rreq_trace_unlock = 8,
+ netfs_rreq_trace_unlock_pgpriv2 = 9,
+ netfs_rreq_trace_unmark = 10,
+ netfs_rreq_trace_wait_ip = 11,
+ netfs_rreq_trace_wait_pause = 12,
+ netfs_rreq_trace_wake_ip = 13,
+ netfs_rreq_trace_unpause = 14,
+ netfs_rreq_trace_write_done = 15,
+} __attribute__((mode(byte)));
+
+enum netfs_sreq_trace {
+ netfs_sreq_trace_add_donations = 0,
+ netfs_sreq_trace_added = 1,
+ netfs_sreq_trace_clear = 2,
+ netfs_sreq_trace_discard = 3,
+ netfs_sreq_trace_donate_to_prev = 4,
+ netfs_sreq_trace_donate_to_next = 5,
+ netfs_sreq_trace_download_instead = 6,
+ netfs_sreq_trace_fail = 7,
+ netfs_sreq_trace_free = 8,
+ netfs_sreq_trace_hit_eof = 9,
+ netfs_sreq_trace_io_progress = 10,
+ netfs_sreq_trace_limited = 11,
+ netfs_sreq_trace_prepare = 12,
+ netfs_sreq_trace_prep_failed = 13,
+ netfs_sreq_trace_progress = 14,
+ netfs_sreq_trace_reprep_failed = 15,
+ netfs_sreq_trace_retry = 16,
+ netfs_sreq_trace_short = 17,
+ netfs_sreq_trace_split = 18,
+ netfs_sreq_trace_submit = 19,
+ netfs_sreq_trace_terminated = 20,
+ netfs_sreq_trace_write = 21,
+ netfs_sreq_trace_write_skip = 22,
+ netfs_sreq_trace_write_term = 23,
+} __attribute__((mode(byte)));
+
+enum netfs_failure {
+ netfs_fail_check_write_begin = 0,
+ netfs_fail_copy_to_cache = 1,
+ netfs_fail_dio_read_short = 2,
+ netfs_fail_dio_read_zero = 3,
+ netfs_fail_read = 4,
+ netfs_fail_short_read = 5,
+ netfs_fail_prepare_write = 6,
+ netfs_fail_write = 7,
+} __attribute__((mode(byte)));
+
+enum netfs_rreq_ref_trace {
+ netfs_rreq_trace_get_for_outstanding = 0,
+ netfs_rreq_trace_get_subreq = 1,
+ netfs_rreq_trace_get_work = 2,
+ netfs_rreq_trace_put_complete = 3,
+ netfs_rreq_trace_put_discard = 4,
+ netfs_rreq_trace_put_failed = 5,
+ netfs_rreq_trace_put_no_submit = 6,
+ netfs_rreq_trace_put_return = 7,
+ netfs_rreq_trace_put_subreq = 8,
+ netfs_rreq_trace_put_work = 9,
+ netfs_rreq_trace_put_work_complete = 10,
+ netfs_rreq_trace_put_work_nq = 11,
+ netfs_rreq_trace_see_work = 12,
+ netfs_rreq_trace_new = 13,
+} __attribute__((mode(byte)));
+
+enum netfs_sreq_ref_trace {
+ netfs_sreq_trace_get_copy_to_cache = 0,
+ netfs_sreq_trace_get_resubmit = 1,
+ netfs_sreq_trace_get_submit = 2,
+ netfs_sreq_trace_get_short_read = 3,
+ netfs_sreq_trace_new = 4,
+ netfs_sreq_trace_put_cancel = 5,
+ netfs_sreq_trace_put_clear = 6,
+ netfs_sreq_trace_put_consumed = 7,
+ netfs_sreq_trace_put_done = 8,
+ netfs_sreq_trace_put_failed = 9,
+ netfs_sreq_trace_put_merged = 10,
+ netfs_sreq_trace_put_no_copy = 11,
+ netfs_sreq_trace_put_oom = 12,
+ netfs_sreq_trace_put_wip = 13,
+ netfs_sreq_trace_put_work = 14,
+ netfs_sreq_trace_put_terminated = 15,
+} __attribute__((mode(byte)));
+
+struct netfs_inode {
+ struct inode inode;
+ const struct netfs_request_ops *ops;
+ struct mutex wb_lock;
+ loff_t remote_i_size;
+ loff_t zero_point;
+ atomic_t io_count;
+ long unsigned int flags;
+};
+
+enum {
+ ES_WRITTEN_B = 0,
+ ES_UNWRITTEN_B = 1,
+ ES_DELAYED_B = 2,
+ ES_HOLE_B = 3,
+ ES_REFERENCED_B = 4,
+ ES_FLAGS = 5,
+};
+
+struct pending_reservation {
+ struct rb_node rb_node;
+ ext4_lblk_t lclu;
+};
+
+struct rsvd_count {
+ int ndelayed;
+ 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;
+};
+
+typedef short unsigned int __kernel_uid16_t;
+
+typedef short unsigned int __kernel_gid16_t;
+
+typedef __kernel_uid16_t uid16_t;
+
+typedef __kernel_gid16_t gid16_t;
+
+struct ext4_map_blocks {
+ ext4_fsblk_t m_pblk;
+ ext4_lblk_t m_lblk;
+ unsigned int m_len;
+ unsigned int m_flags;
+};
+
+struct ext4_io_end_vec {
+ struct list_head list;
+ loff_t offset;
+ ssize_t size;
+};
+
+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 ext4_io_submit {
+ struct writeback_control *io_wbc;
+ struct bio *io_bio;
+ ext4_io_end_t *io_end;
+ sector_t io_next_block;
+};
+
+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;
+};
+
+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,
+};
+
+struct ext4_iloc {
+ struct buffer_head *bh;
+ long unsigned int offset;
+ ext4_group_t block_group;
+};
+
+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;
+
+struct ext4_xattr_ibody_header {
+ __le32 h_magic;
+};
+
+struct ext4_xattr_inode_array {
+ unsigned int count;
+ struct inode *inodes[0];
+};
+
+struct mpage_da_data {
+ struct inode *inode;
+ struct writeback_control *wbc;
+ unsigned int can_map: 1;
+ long unsigned int first_page;
+ long unsigned int next_page;
+ long unsigned int 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 fsverity_info;
+
+struct fscrypt_inode_info;
+
+typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
+
+struct tm {
+ int tm_sec;
+ int tm_min;
+ int tm_hour;
+ int tm_mday;
+ int tm_mon;
+ long int tm_year;
+ int tm_wday;
+ int tm_yday;
+};
+
+struct fat_boot_fsinfo {
+ __le32 signature1;
+ __le32 reserved1[120];
+ __le32 signature2;
+ __le32 free_clusters;
+ __le32 next_cluster;
+ __le32 reserved2[4];
+};
+
+typedef long long unsigned int llu;
+
+struct iso_directory_record {
+ __u8 length[1];
+ __u8 ext_attr_length[1];
+ __u8 extent[8];
+ __u8 size[8];
+ __u8 date[7];
+ __u8 flags[1];
+ __u8 file_unit_size[1];
+ __u8 interleave[1];
+ __u8 volume_sequence_number[4];
+ __u8 name_len[1];
+ char name[0];
+};
+
+struct isofs_fid {
+ u32 block;
+ u16 offset;
+ u16 parent_offset;
+ u32 generation;
+ u32 parent_block;
+ u32 parent_generation;
+};
+
+struct nfs_clone_mount {
+ struct super_block *sb;
+ struct dentry *dentry;
+ struct nfs_fattr *fattr;
+ unsigned int inherited_bsize;
+};
+
+struct nfs_fs_context {
+ bool internal;
+ bool skip_reconfig_option_check;
+ bool need_mount;
+ bool sloppy;
+ unsigned int flags;
+ unsigned int rsize;
+ unsigned int wsize;
+ unsigned int timeo;
+ unsigned int retrans;
+ unsigned int acregmin;
+ unsigned int acregmax;
+ unsigned int acdirmin;
+ unsigned int acdirmax;
+ unsigned int namlen;
+ unsigned int options;
+ unsigned int bsize;
+ struct nfs_auth_info auth_info;
+ rpc_authflavor_t selected_flavor;
+ struct xprtsec_parms xprtsec;
+ char *client_address;
+ unsigned int version;
+ unsigned int minorversion;
+ char *fscache_uniq;
+ short unsigned int protofamily;
+ short unsigned int mountfamily;
+ bool has_sec_mnt_opts;
+ int lock_status;
+ struct {
+ union {
+ struct sockaddr address;
+ struct __kernel_sockaddr_storage _address;
+ };
+ size_t addrlen;
+ char *hostname;
+ u32 version;
+ int port;
+ short unsigned int protocol;
+ } mount_server;
+ struct {
+ union {
+ struct sockaddr address;
+ struct __kernel_sockaddr_storage _address;
+ };
+ size_t addrlen;
+ char *hostname;
+ char *export_path;
+ int port;
+ short unsigned int protocol;
+ short unsigned int nconnect;
+ short unsigned int max_connect;
+ short unsigned int export_path_len;
+ } nfs_server;
+ struct nfs_fh *mntfh;
+ struct nfs_server *server;
+ struct nfs_subversion *nfs_mod;
+ struct nfs_clone_mount clone_data;
+};
+
+typedef void (*rpc_action)(struct rpc_task *);
+
+struct nfs_page_iter_page {
+ const struct nfs_page *req;
+ size_t count;
+};
+
+struct nfsd_file;
+
+struct nfs2_fh {
+ char data[32];
+};
+
+struct nfs3_fh {
+ short unsigned int size;
+ unsigned char data[64];
+};
+
+struct nfs_mount_data {
+ int version;
+ int fd;
+ struct nfs2_fh old_root;
+ int flags;
+ int rsize;
+ int wsize;
+ int timeo;
+ int retrans;
+ int acregmin;
+ int acregmax;
+ int acdirmin;
+ int acdirmax;
+ struct sockaddr_in addr;
+ char hostname[256];
+ int namlen;
+ unsigned int bsize;
+ struct nfs3_fh root;
+ int pseudoflavor;
+ char context[257];
+};
+
+struct nfs_string {
+ unsigned int len;
+ const char *data;
+};
+
+struct nfs4_mount_data {
+ int version;
+ int flags;
+ int rsize;
+ int wsize;
+ int timeo;
+ int retrans;
+ int acregmin;
+ int acregmax;
+ int acdirmin;
+ int acdirmax;
+ struct nfs_string client_addr;
+ struct nfs_string mnt_path;
+ struct nfs_string hostname;
+ unsigned int host_addrlen;
+ struct sockaddr *host_addr;
+ int proto;
+ int auth_flavourlen;
+ int *auth_flavours;
+};
+
+enum {
+ TLS_NO_KEYRING = 0,
+ TLS_NO_PEERID = 0,
+ TLS_NO_CERT = 0,
+ TLS_NO_PRIVKEY = 0,
+};
+
+enum nfs_lock_status {
+ NFS_LOCK_NOT_SET = 0,
+ NFS_LOCK_LOCK = 1,
+ NFS_LOCK_NOLOCK = 2,
+};
+
+enum nfs_param {
+ Opt_ac = 0,
+ Opt_acdirmax = 1,
+ Opt_acdirmin = 2,
+ Opt_acl = 3,
+ Opt_acregmax = 4,
+ Opt_acregmin = 5,
+ Opt_actimeo = 6,
+ Opt_addr = 7,
+ Opt_bg = 8,
+ Opt_bsize = 9,
+ Opt_clientaddr = 10,
+ Opt_cto = 11,
+ Opt_alignwrite = 12,
+ Opt_fg = 13,
+ Opt_fscache = 14,
+ Opt_fscache_flag = 15,
+ Opt_hard = 16,
+ Opt_intr = 17,
+ Opt_local_lock = 18,
+ Opt_lock = 19,
+ Opt_lookupcache = 20,
+ Opt_migration = 21,
+ Opt_minorversion = 22,
+ Opt_mountaddr = 23,
+ Opt_mounthost = 24,
+ Opt_mountport = 25,
+ Opt_mountproto = 26,
+ Opt_mountvers = 27,
+ Opt_namelen = 28,
+ Opt_nconnect = 29,
+ Opt_max_connect = 30,
+ Opt_port = 31,
+ Opt_posix = 32,
+ Opt_proto = 33,
+ Opt_rdirplus = 34,
+ Opt_rdma = 35,
+ Opt_resvport = 36,
+ Opt_retrans = 37,
+ Opt_retry = 38,
+ Opt_rsize = 39,
+ Opt_sec = 40,
+ Opt_sharecache = 41,
+ Opt_sloppy = 42,
+ Opt_soft = 43,
+ Opt_softerr = 44,
+ Opt_softreval = 45,
+ Opt_source___2 = 46,
+ Opt_tcp = 47,
+ Opt_timeo = 48,
+ Opt_trunkdiscovery = 49,
+ Opt_udp = 50,
+ Opt_v = 51,
+ Opt_vers = 52,
+ Opt_wsize = 53,
+ Opt_write = 54,
+ Opt_xprtsec = 55,
+};
+
+enum {
+ Opt_local_lock_all = 0,
+ Opt_local_lock_flock = 1,
+ Opt_local_lock_none = 2,
+ Opt_local_lock_posix = 3,
+};
+
+enum {
+ Opt_lookupcache_all = 0,
+ Opt_lookupcache_none = 1,
+ Opt_lookupcache_positive = 2,
+};
+
+enum {
+ Opt_write_lazy = 0,
+ Opt_write_eager = 1,
+ Opt_write_wait = 2,
+};
+
+enum {
+ Opt_vers_2 = 0,
+ Opt_vers_3 = 1,
+ Opt_vers_4 = 2,
+ Opt_vers_4_0 = 3,
+ Opt_vers_4_1 = 4,
+ Opt_vers_4_2 = 5,
+};
+
+enum {
+ Opt_xprt_rdma = 0,
+ Opt_xprt_rdma6 = 1,
+ Opt_xprt_tcp = 2,
+ Opt_xprt_tcp6 = 3,
+ Opt_xprt_udp = 4,
+ Opt_xprt_udp6 = 5,
+ nr__Opt_xprt = 6,
+};
+
+enum {
+ Opt_sec_krb5 = 0,
+ Opt_sec_krb5i = 1,
+ Opt_sec_krb5p = 2,
+ Opt_sec_lkey = 3,
+ Opt_sec_lkeyi = 4,
+ Opt_sec_lkeyp = 5,
+ Opt_sec_none = 6,
+ Opt_sec_spkm = 7,
+ Opt_sec_spkmi = 8,
+ Opt_sec_spkmp = 9,
+ Opt_sec_sys = 10,
+ nr__Opt_sec = 11,
+};
+
+enum {
+ Opt_xprtsec_none = 0,
+ Opt_xprtsec_tls = 1,
+ Opt_xprtsec_mtls = 2,
+ nr__Opt_xprtsec = 3,
+};
+
+struct compat_nfs_string {
+ compat_uint_t len;
+ compat_uptr_t data;
+};
+
+struct compat_nfs4_mount_data_v1 {
+ compat_int_t version;
+ compat_int_t flags;
+ compat_int_t rsize;
+ compat_int_t wsize;
+ compat_int_t timeo;
+ compat_int_t retrans;
+ compat_int_t acregmin;
+ compat_int_t acregmax;
+ compat_int_t acdirmin;
+ compat_int_t acdirmax;
+ struct compat_nfs_string client_addr;
+ struct compat_nfs_string mnt_path;
+ struct compat_nfs_string hostname;
+ compat_uint_t host_addrlen;
+ compat_uptr_t host_addr;
+ compat_int_t proto;
+ compat_int_t auth_flavourlen;
+ compat_uptr_t auth_flavours;
+};
+
+struct nfs_delegation {
+ struct list_head super_list;
+ const struct cred *cred;
+ struct inode *inode;
+ nfs4_stateid stateid;
+ fmode_t type;
+ long unsigned int pagemod_limit;
+ __u64 change_attr;
+ long unsigned int test_gen;
+ long unsigned int flags;
+ refcount_t refcount;
+ spinlock_t lock;
+ struct callback_head rcu;
+};
+
+enum {
+ NFS_LAYOUT_RO_FAILED = 0,
+ NFS_LAYOUT_RW_FAILED = 1,
+ NFS_LAYOUT_BULK_RECALL = 2,
+ NFS_LAYOUT_RETURN = 3,
+ NFS_LAYOUT_RETURN_LOCK = 4,
+ NFS_LAYOUT_RETURN_REQUESTED = 5,
+ NFS_LAYOUT_INVALID_STID = 6,
+ NFS_LAYOUT_FIRST_LAYOUTGET = 7,
+ NFS_LAYOUT_INODE_FREEING = 8,
+ NFS_LAYOUT_HASHED = 9,
+ NFS_LAYOUT_DRAIN = 10,
+};
+
+struct nfs_referral_count {
+ struct list_head list;
+ const struct task_struct *task;
+ unsigned int referral_count;
+};
+
+enum nfsstat4 {
+ NFS4_OK = 0,
+ NFS4ERR_PERM = 1,
+ NFS4ERR_NOENT = 2,
+ NFS4ERR_IO = 5,
+ NFS4ERR_NXIO = 6,
+ NFS4ERR_ACCESS = 13,
+ NFS4ERR_EXIST = 17,
+ NFS4ERR_XDEV = 18,
+ NFS4ERR_NOTDIR = 20,
+ NFS4ERR_ISDIR = 21,
+ NFS4ERR_INVAL = 22,
+ NFS4ERR_FBIG = 27,
+ NFS4ERR_NOSPC = 28,
+ NFS4ERR_ROFS = 30,
+ NFS4ERR_MLINK = 31,
+ NFS4ERR_NAMETOOLONG = 63,
+ NFS4ERR_NOTEMPTY = 66,
+ NFS4ERR_DQUOT = 69,
+ NFS4ERR_STALE = 70,
+ NFS4ERR_BADHANDLE = 10001,
+ NFS4ERR_BAD_COOKIE = 10003,
+ NFS4ERR_NOTSUPP = 10004,
+ NFS4ERR_TOOSMALL = 10005,
+ NFS4ERR_SERVERFAULT = 10006,
+ NFS4ERR_BADTYPE = 10007,
+ NFS4ERR_DELAY = 10008,
+ NFS4ERR_SAME = 10009,
+ NFS4ERR_DENIED = 10010,
+ NFS4ERR_EXPIRED = 10011,
+ NFS4ERR_LOCKED = 10012,
+ NFS4ERR_GRACE = 10013,
+ NFS4ERR_FHEXPIRED = 10014,
+ NFS4ERR_SHARE_DENIED = 10015,
+ NFS4ERR_WRONGSEC = 10016,
+ NFS4ERR_CLID_INUSE = 10017,
+ NFS4ERR_RESOURCE = 10018,
+ NFS4ERR_MOVED = 10019,
+ NFS4ERR_NOFILEHANDLE = 10020,
+ NFS4ERR_MINOR_VERS_MISMATCH = 10021,
+ NFS4ERR_STALE_CLIENTID = 10022,
+ NFS4ERR_STALE_STATEID = 10023,
+ NFS4ERR_OLD_STATEID = 10024,
+ NFS4ERR_BAD_STATEID = 10025,
+ NFS4ERR_BAD_SEQID = 10026,
+ NFS4ERR_NOT_SAME = 10027,
+ NFS4ERR_LOCK_RANGE = 10028,
+ NFS4ERR_SYMLINK = 10029,
+ NFS4ERR_RESTOREFH = 10030,
+ NFS4ERR_LEASE_MOVED = 10031,
+ NFS4ERR_ATTRNOTSUPP = 10032,
+ NFS4ERR_NO_GRACE = 10033,
+ NFS4ERR_RECLAIM_BAD = 10034,
+ NFS4ERR_RECLAIM_CONFLICT = 10035,
+ NFS4ERR_BADXDR = 10036,
+ NFS4ERR_LOCKS_HELD = 10037,
+ NFS4ERR_OPENMODE = 10038,
+ NFS4ERR_BADOWNER = 10039,
+ NFS4ERR_BADCHAR = 10040,
+ NFS4ERR_BADNAME = 10041,
+ NFS4ERR_BAD_RANGE = 10042,
+ NFS4ERR_LOCK_NOTSUPP = 10043,
+ NFS4ERR_OP_ILLEGAL = 10044,
+ NFS4ERR_DEADLOCK = 10045,
+ NFS4ERR_FILE_OPEN = 10046,
+ NFS4ERR_ADMIN_REVOKED = 10047,
+ NFS4ERR_CB_PATH_DOWN = 10048,
+ NFS4ERR_BADIOMODE = 10049,
+ NFS4ERR_BADLAYOUT = 10050,
+ NFS4ERR_BAD_SESSION_DIGEST = 10051,
+ NFS4ERR_BADSESSION = 10052,
+ NFS4ERR_BADSLOT = 10053,
+ NFS4ERR_COMPLETE_ALREADY = 10054,
+ NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055,
+ NFS4ERR_DELEG_ALREADY_WANTED = 10056,
+ NFS4ERR_BACK_CHAN_BUSY = 10057,
+ NFS4ERR_LAYOUTTRYLATER = 10058,
+ NFS4ERR_LAYOUTUNAVAILABLE = 10059,
+ NFS4ERR_NOMATCHING_LAYOUT = 10060,
+ NFS4ERR_RECALLCONFLICT = 10061,
+ NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062,
+ NFS4ERR_SEQ_MISORDERED = 10063,
+ NFS4ERR_SEQUENCE_POS = 10064,
+ NFS4ERR_REQ_TOO_BIG = 10065,
+ NFS4ERR_REP_TOO_BIG = 10066,
+ NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067,
+ NFS4ERR_RETRY_UNCACHED_REP = 10068,
+ NFS4ERR_UNSAFE_COMPOUND = 10069,
+ NFS4ERR_TOO_MANY_OPS = 10070,
+ NFS4ERR_OP_NOT_IN_SESSION = 10071,
+ NFS4ERR_HASH_ALG_UNSUPP = 10072,
+ NFS4ERR_CLIENTID_BUSY = 10074,
+ NFS4ERR_PNFS_IO_HOLE = 10075,
+ NFS4ERR_SEQ_FALSE_RETRY = 10076,
+ NFS4ERR_BAD_HIGH_SLOT = 10077,
+ NFS4ERR_DEADSESSION = 10078,
+ NFS4ERR_ENCR_ALG_UNSUPP = 10079,
+ NFS4ERR_PNFS_NO_LAYOUT = 10080,
+ NFS4ERR_NOT_ONLY_OP = 10081,
+ NFS4ERR_WRONG_CRED = 10082,
+ NFS4ERR_WRONG_TYPE = 10083,
+ NFS4ERR_DIRDELEG_UNAVAIL = 10084,
+ NFS4ERR_REJECT_DELEG = 10085,
+ NFS4ERR_RETURNCONFLICT = 10086,
+ NFS4ERR_DELEG_REVOKED = 10087,
+ NFS4ERR_PARTNER_NOTSUPP = 10088,
+ NFS4ERR_PARTNER_NO_AUTH = 10089,
+ NFS4ERR_UNION_NOTSUPP = 10090,
+ NFS4ERR_OFFLOAD_DENIED = 10091,
+ NFS4ERR_WRONG_LFS = 10092,
+ NFS4ERR_BADLABEL = 10093,
+ NFS4ERR_OFFLOAD_NO_REQS = 10094,
+ NFS4ERR_NOXATTR = 10095,
+ NFS4ERR_XATTR2BIG = 10096,
+ NFS4ERR_FIRST_FREE = 10097,
+};
+
+enum {
+ FATTR4_SUPPORTED_ATTRS = 0,
+ FATTR4_TYPE = 1,
+ FATTR4_FH_EXPIRE_TYPE = 2,
+ FATTR4_CHANGE = 3,
+ FATTR4_SIZE = 4,
+ FATTR4_LINK_SUPPORT = 5,
+ FATTR4_SYMLINK_SUPPORT = 6,
+ FATTR4_NAMED_ATTR = 7,
+ FATTR4_FSID = 8,
+ FATTR4_UNIQUE_HANDLES = 9,
+ FATTR4_LEASE_TIME = 10,
+ FATTR4_RDATTR_ERROR = 11,
+ FATTR4_ACL = 12,
+ FATTR4_ACLSUPPORT = 13,
+ FATTR4_ARCHIVE = 14,
+ FATTR4_CANSETTIME = 15,
+ FATTR4_CASE_INSENSITIVE = 16,
+ FATTR4_CASE_PRESERVING = 17,
+ FATTR4_CHOWN_RESTRICTED = 18,
+ FATTR4_FILEHANDLE = 19,
+ FATTR4_FILEID = 20,
+ FATTR4_FILES_AVAIL = 21,
+ FATTR4_FILES_FREE = 22,
+ FATTR4_FILES_TOTAL = 23,
+ FATTR4_FS_LOCATIONS = 24,
+ FATTR4_HIDDEN = 25,
+ FATTR4_HOMOGENEOUS = 26,
+ FATTR4_MAXFILESIZE = 27,
+ FATTR4_MAXLINK = 28,
+ FATTR4_MAXNAME = 29,
+ FATTR4_MAXREAD = 30,
+ FATTR4_MAXWRITE = 31,
+ FATTR4_MIMETYPE = 32,
+ FATTR4_MODE = 33,
+ FATTR4_NO_TRUNC = 34,
+ FATTR4_NUMLINKS = 35,
+ FATTR4_OWNER = 36,
+ FATTR4_OWNER_GROUP = 37,
+ FATTR4_QUOTA_AVAIL_HARD = 38,
+ FATTR4_QUOTA_AVAIL_SOFT = 39,
+ FATTR4_QUOTA_USED = 40,
+ FATTR4_RAWDEV = 41,
+ FATTR4_SPACE_AVAIL = 42,
+ FATTR4_SPACE_FREE = 43,
+ FATTR4_SPACE_TOTAL = 44,
+ FATTR4_SPACE_USED = 45,
+ FATTR4_SYSTEM = 46,
+ FATTR4_TIME_ACCESS = 47,
+ FATTR4_TIME_ACCESS_SET = 48,
+ FATTR4_TIME_BACKUP = 49,
+ FATTR4_TIME_CREATE = 50,
+ FATTR4_TIME_DELTA = 51,
+ FATTR4_TIME_METADATA = 52,
+ FATTR4_TIME_MODIFY = 53,
+ FATTR4_TIME_MODIFY_SET = 54,
+ FATTR4_MOUNTED_ON_FILEID = 55,
+};
+
+enum {
+ FATTR4_TIME_DELEG_ACCESS = 84,
+ FATTR4_TIME_DELEG_MODIFY = 85,
+ FATTR4_OPEN_ARGUMENTS = 86,
+};
+
+enum pnfs_layoutreturn_type {
+ RETURN_FILE = 1,
+ RETURN_FSID = 2,
+ RETURN_ALL = 3,
+};
+
+enum pnfs_notify_deviceid_type4 {
+ NOTIFY_DEVICEID4_CHANGE = 2,
+ NOTIFY_DEVICEID4_DELETE = 4,
+};
+
+enum nfs_cb_opnum4 {
+ OP_CB_GETATTR = 3,
+ OP_CB_RECALL = 4,
+ OP_CB_LAYOUTRECALL = 5,
+ OP_CB_NOTIFY = 6,
+ OP_CB_PUSH_DELEG = 7,
+ OP_CB_RECALL_ANY = 8,
+ OP_CB_RECALLABLE_OBJ_AVAIL = 9,
+ OP_CB_RECALL_SLOT = 10,
+ OP_CB_SEQUENCE = 11,
+ OP_CB_WANTS_CANCELLED = 12,
+ OP_CB_NOTIFY_LOCK = 13,
+ OP_CB_NOTIFY_DEVICEID = 14,
+ OP_CB_OFFLOAD = 15,
+ OP_CB_ILLEGAL = 10044,
+};
+
+enum nfs_stat {
+ NFS_OK = 0,
+ NFSERR_PERM = 1,
+ NFSERR_NOENT = 2,
+ NFSERR_IO = 5,
+ NFSERR_NXIO = 6,
+ NFSERR_EAGAIN = 11,
+ NFSERR_ACCES = 13,
+ NFSERR_EXIST = 17,
+ NFSERR_XDEV = 18,
+ NFSERR_NODEV = 19,
+ NFSERR_NOTDIR = 20,
+ NFSERR_ISDIR = 21,
+ NFSERR_INVAL = 22,
+ NFSERR_FBIG = 27,
+ NFSERR_NOSPC = 28,
+ NFSERR_ROFS = 30,
+ NFSERR_MLINK = 31,
+ NFSERR_NAMETOOLONG = 63,
+ NFSERR_NOTEMPTY = 66,
+ NFSERR_DQUOT = 69,
+ NFSERR_STALE = 70,
+ NFSERR_REMOTE = 71,
+ NFSERR_WFLUSH = 99,
+ NFSERR_BADHANDLE = 10001,
+ NFSERR_NOT_SYNC = 10002,
+ NFSERR_BAD_COOKIE = 10003,
+ NFSERR_NOTSUPP = 10004,
+ NFSERR_TOOSMALL = 10005,
+ NFSERR_SERVERFAULT = 10006,
+ NFSERR_BADTYPE = 10007,
+ NFSERR_JUKEBOX = 10008,
+ NFSERR_SAME = 10009,
+ NFSERR_DENIED = 10010,
+ NFSERR_EXPIRED = 10011,
+ NFSERR_LOCKED = 10012,
+ NFSERR_GRACE = 10013,
+ NFSERR_FHEXPIRED = 10014,
+ NFSERR_SHARE_DENIED = 10015,
+ NFSERR_WRONGSEC = 10016,
+ NFSERR_CLID_INUSE = 10017,
+ NFSERR_RESOURCE = 10018,
+ NFSERR_MOVED = 10019,
+ NFSERR_NOFILEHANDLE = 10020,
+ NFSERR_MINOR_VERS_MISMATCH = 10021,
+ NFSERR_STALE_CLIENTID = 10022,
+ NFSERR_STALE_STATEID = 10023,
+ NFSERR_OLD_STATEID = 10024,
+ NFSERR_BAD_STATEID = 10025,
+ NFSERR_BAD_SEQID = 10026,
+ NFSERR_NOT_SAME = 10027,
+ NFSERR_LOCK_RANGE = 10028,
+ NFSERR_SYMLINK = 10029,
+ NFSERR_RESTOREFH = 10030,
+ NFSERR_LEASE_MOVED = 10031,
+ NFSERR_ATTRNOTSUPP = 10032,
+ NFSERR_NO_GRACE = 10033,
+ NFSERR_RECLAIM_BAD = 10034,
+ NFSERR_RECLAIM_CONFLICT = 10035,
+ NFSERR_BAD_XDR = 10036,
+ NFSERR_LOCKS_HELD = 10037,
+ NFSERR_OPENMODE = 10038,
+ NFSERR_BADOWNER = 10039,
+ NFSERR_BADCHAR = 10040,
+ NFSERR_BADNAME = 10041,
+ NFSERR_BAD_RANGE = 10042,
+ NFSERR_LOCK_NOTSUPP = 10043,
+ NFSERR_OP_ILLEGAL = 10044,
+ NFSERR_DEADLOCK = 10045,
+ NFSERR_FILE_OPEN = 10046,
+ NFSERR_ADMIN_REVOKED = 10047,
+ NFSERR_CB_PATH_DOWN = 10048,
+};
+
+struct nfs_lowner {
+ __u64 clientid;
+ __u64 id;
+ dev_t s_dev;
+};
+
+struct cb_process_state {
+ struct nfs_client *clp;
+ struct nfs4_slot *slot;
+ struct net *net;
+ u32 minorversion;
+ __be32 drc_status;
+ unsigned int referring_calls;
+};
+
+struct cb_compound_hdr_arg {
+ unsigned int taglen;
+ const char *tag;
+ unsigned int minorversion;
+ unsigned int cb_ident;
+ unsigned int nops;
+};
+
+struct cb_compound_hdr_res {
+ __be32 *status;
+ unsigned int taglen;
+ const char *tag;
+ __be32 *nops;
+};
+
+struct cb_getattrargs {
+ struct nfs_fh fh;
+ uint32_t bitmap[3];
+};
+
+struct cb_getattrres {
+ __be32 status;
+ uint32_t bitmap[3];
+ uint64_t size;
+ uint64_t change_attr;
+ struct timespec64 atime;
+ struct timespec64 ctime;
+ struct timespec64 mtime;
+};
+
+struct cb_recallargs {
+ struct nfs_fh fh;
+ nfs4_stateid stateid;
+ uint32_t truncate;
+};
+
+struct referring_call {
+ uint32_t rc_sequenceid;
+ uint32_t rc_slotid;
+};
+
+struct referring_call_list {
+ struct nfs4_sessionid rcl_sessionid;
+ uint32_t rcl_nrefcalls;
+ struct referring_call *rcl_refcalls;
+};
+
+struct cb_sequenceargs {
+ struct sockaddr *csa_addr;
+ struct nfs4_sessionid csa_sessionid;
+ uint32_t csa_sequenceid;
+ uint32_t csa_slotid;
+ uint32_t csa_highestslotid;
+ uint32_t csa_cachethis;
+ uint32_t csa_nrclists;
+ struct referring_call_list *csa_rclists;
+};
+
+struct cb_sequenceres {
+ __be32 csr_status;
+ struct nfs4_sessionid csr_sessionid;
+ uint32_t csr_sequenceid;
+ uint32_t csr_slotid;
+ uint32_t csr_highestslotid;
+ uint32_t csr_target_highestslotid;
+};
+
+struct cb_recallanyargs {
+ uint32_t craa_objs_to_keep;
+ uint32_t craa_type_mask;
+};
+
+struct cb_recallslotargs {
+ uint32_t crsa_target_highest_slotid;
+};
+
+struct cb_layoutrecallargs {
+ uint32_t cbl_recall_type;
+ uint32_t cbl_layout_type;
+ uint32_t cbl_layoutchanged;
+ union {
+ struct {
+ struct nfs_fh cbl_fh;
+ struct pnfs_layout_range cbl_range;
+ nfs4_stateid cbl_stateid;
+ };
+ struct nfs_fsid cbl_fsid;
+ };
+};
+
+struct cb_devicenotifyitem {
+ uint32_t cbd_notify_type;
+ uint32_t cbd_layout_type;
+ struct nfs4_deviceid cbd_dev_id;
+ uint32_t cbd_immediate;
+};
+
+struct cb_devicenotifyargs {
+ uint32_t ndevs;
+ struct cb_devicenotifyitem *devs;
+};
+
+struct cb_notify_lock_args {
+ struct nfs_fh cbnl_fh;
+ struct nfs_lowner cbnl_owner;
+ bool cbnl_valid;
+};
+
+struct cb_offloadargs {
+ struct nfs_fh coa_fh;
+ nfs4_stateid coa_stateid;
+ uint32_t error;
+ uint64_t wr_count;
+ struct nfs_writeverf wr_writeverf;
+};
+
+struct callback_op {
+ __be32 (*process_op)(void *, void *, struct cb_process_state *);
+ __be32 (*decode_args)(struct svc_rqst *, struct xdr_stream *, void *);
+ __be32 (*encode_res)(struct svc_rqst *, struct xdr_stream *, const void *);
+ long int res_maxsize;
+};
+
+enum {
+ NFSPROC4_CLNT_NULL = 0,
+ NFSPROC4_CLNT_READ = 1,
+ NFSPROC4_CLNT_WRITE = 2,
+ NFSPROC4_CLNT_COMMIT = 3,
+ NFSPROC4_CLNT_OPEN = 4,
+ NFSPROC4_CLNT_OPEN_CONFIRM = 5,
+ NFSPROC4_CLNT_OPEN_NOATTR = 6,
+ NFSPROC4_CLNT_OPEN_DOWNGRADE = 7,
+ NFSPROC4_CLNT_CLOSE = 8,
+ NFSPROC4_CLNT_SETATTR = 9,
+ NFSPROC4_CLNT_FSINFO = 10,
+ NFSPROC4_CLNT_RENEW = 11,
+ NFSPROC4_CLNT_SETCLIENTID = 12,
+ NFSPROC4_CLNT_SETCLIENTID_CONFIRM = 13,
+ NFSPROC4_CLNT_LOCK = 14,
+ NFSPROC4_CLNT_LOCKT = 15,
+ NFSPROC4_CLNT_LOCKU = 16,
+ NFSPROC4_CLNT_ACCESS = 17,
+ NFSPROC4_CLNT_GETATTR = 18,
+ NFSPROC4_CLNT_LOOKUP = 19,
+ NFSPROC4_CLNT_LOOKUP_ROOT = 20,
+ NFSPROC4_CLNT_REMOVE = 21,
+ NFSPROC4_CLNT_RENAME = 22,
+ NFSPROC4_CLNT_LINK = 23,
+ NFSPROC4_CLNT_SYMLINK = 24,
+ NFSPROC4_CLNT_CREATE = 25,
+ NFSPROC4_CLNT_PATHCONF = 26,
+ NFSPROC4_CLNT_STATFS = 27,
+ NFSPROC4_CLNT_READLINK = 28,
+ NFSPROC4_CLNT_READDIR = 29,
+ NFSPROC4_CLNT_SERVER_CAPS = 30,
+ NFSPROC4_CLNT_DELEGRETURN = 31,
+ NFSPROC4_CLNT_GETACL = 32,
+ NFSPROC4_CLNT_SETACL = 33,
+ NFSPROC4_CLNT_FS_LOCATIONS = 34,
+ NFSPROC4_CLNT_RELEASE_LOCKOWNER = 35,
+ NFSPROC4_CLNT_SECINFO = 36,
+ NFSPROC4_CLNT_FSID_PRESENT = 37,
+ NFSPROC4_CLNT_EXCHANGE_ID = 38,
+ NFSPROC4_CLNT_CREATE_SESSION = 39,
+ NFSPROC4_CLNT_DESTROY_SESSION = 40,
+ NFSPROC4_CLNT_SEQUENCE = 41,
+ NFSPROC4_CLNT_GET_LEASE_TIME = 42,
+ NFSPROC4_CLNT_RECLAIM_COMPLETE = 43,
+ NFSPROC4_CLNT_LAYOUTGET = 44,
+ NFSPROC4_CLNT_GETDEVICEINFO = 45,
+ NFSPROC4_CLNT_LAYOUTCOMMIT = 46,
+ NFSPROC4_CLNT_LAYOUTRETURN = 47,
+ NFSPROC4_CLNT_SECINFO_NO_NAME = 48,
+ NFSPROC4_CLNT_TEST_STATEID = 49,
+ NFSPROC4_CLNT_FREE_STATEID = 50,
+ NFSPROC4_CLNT_GETDEVICELIST = 51,
+ NFSPROC4_CLNT_BIND_CONN_TO_SESSION = 52,
+ NFSPROC4_CLNT_DESTROY_CLIENTID = 53,
+ NFSPROC4_CLNT_SEEK = 54,
+ NFSPROC4_CLNT_ALLOCATE = 55,
+ NFSPROC4_CLNT_DEALLOCATE = 56,
+ NFSPROC4_CLNT_LAYOUTSTATS = 57,
+ NFSPROC4_CLNT_CLONE = 58,
+ NFSPROC4_CLNT_COPY = 59,
+ NFSPROC4_CLNT_OFFLOAD_CANCEL = 60,
+ NFSPROC4_CLNT_LOOKUPP = 61,
+ NFSPROC4_CLNT_LAYOUTERROR = 62,
+ NFSPROC4_CLNT_COPY_NOTIFY = 63,
+ NFSPROC4_CLNT_GETXATTR = 64,
+ NFSPROC4_CLNT_SETXATTR = 65,
+ NFSPROC4_CLNT_LISTXATTRS = 66,
+ NFSPROC4_CLNT_REMOVEXATTR = 67,
+ NFSPROC4_CLNT_READ_PLUS = 68,
+};
+
+enum pnfs_layouttype {
+ LAYOUT_NFSV4_1_FILES = 1,
+ LAYOUT_OSD2_OBJECTS = 2,
+ LAYOUT_BLOCK_VOLUME = 3,
+ LAYOUT_FLEX_FILES = 4,
+ LAYOUT_SCSI = 5,
+ LAYOUT_TYPE_MAX = 6,
+};
+
+struct nfs42_device_error {
+ struct nfs4_deviceid dev_id;
+ int status;
+ enum nfs_opnum4 opnum;
+};
+
+struct nfs42_layout_error {
+ __u64 offset;
+ __u64 length;
+ nfs4_stateid stateid;
+ struct nfs42_device_error errors[1];
+};
+
+enum {
+ NFS_LSEG_VALID = 0,
+ NFS_LSEG_ROC = 1,
+ NFS_LSEG_LAYOUTCOMMIT = 2,
+ NFS_LSEG_LAYOUTRETURN = 3,
+ NFS_LSEG_UNAVAILABLE = 4,
+};
+
+enum layoutdriver_policy_flags {
+ PNFS_LAYOUTRET_ON_SETATTR = 1,
+ PNFS_LAYOUTRET_ON_ERROR = 2,
+ PNFS_READ_WHOLE_PAGE = 4,
+ PNFS_LAYOUTGET_ON_OPEN = 8,
+};
+
+struct nfs4_ff_ds_version {
+ u32 version;
+ u32 minor_version;
+ u32 rsize;
+ u32 wsize;
+ bool tightly_coupled;
+};
+
+struct nfs4_ff_layout_ds {
+ struct nfs4_deviceid_node id_node;
+ u32 ds_versions_cnt;
+ struct nfs4_ff_ds_version *ds_versions;
+ struct nfs4_pnfs_ds *ds;
+};
+
+struct nfs4_ff_layout_ds_err {
+ struct list_head list;
+ u64 offset;
+ u64 length;
+ int status;
+ enum nfs_opnum4 opnum;
+ nfs4_stateid stateid;
+ struct nfs4_deviceid deviceid;
+};
+
+struct nfs4_ff_io_stat {
+ __u64 ops_requested;
+ __u64 bytes_requested;
+ __u64 ops_completed;
+ __u64 bytes_completed;
+ __u64 bytes_not_delivered;
+ ktime_t total_busy_time;
+ ktime_t aggregate_completion_time;
+};
+
+struct nfs4_ff_busy_timer {
+ ktime_t start_time;
+ atomic_t n_ops;
+};
+
+struct nfs4_ff_layoutstat {
+ struct nfs4_ff_io_stat io_stat;
+ struct nfs4_ff_busy_timer busy_timer;
+};
+
+struct nfs4_ff_layout_mirror {
+ struct pnfs_layout_hdr *layout;
+ struct list_head mirrors;
+ u32 ds_count;
+ u32 efficiency;
+ struct nfs4_deviceid devid;
+ struct nfs4_ff_layout_ds *mirror_ds;
+ u32 fh_versions_cnt;
+ struct nfs_fh *fh_versions;
+ nfs4_stateid stateid;
+ const struct cred *ro_cred;
+ const struct cred *rw_cred;
+ refcount_t ref;
+ spinlock_t lock;
+ long unsigned int flags;
+ struct nfs4_ff_layoutstat read_stat;
+ struct nfs4_ff_layoutstat write_stat;
+ ktime_t start_time;
+ u32 report_interval;
+};
+
+struct nfs4_ff_layout_segment {
+ struct pnfs_layout_segment generic_hdr;
+ u64 stripe_unit;
+ u32 flags;
+ u32 mirror_array_cnt;
+ struct nfs4_ff_layout_mirror *mirror_array[0];
+};
+
+struct nfs4_flexfile_layout {
+ struct pnfs_layout_hdr generic_hdr;
+ struct pnfs_ds_commit_info commit_info;
+ struct list_head mirrors;
+ struct list_head error_list;
+ ktime_t last_report_time;
+};
+
+struct nfs4_flexfile_layoutreturn_args {
+ struct list_head errors;
+ struct nfs42_layoutstat_devinfo devinfo[4];
+ unsigned int num_errors;
+ unsigned int num_dev;
+ struct page *pages[1];
+};
+
+enum nfs4_ff_op_type {
+ NFS4_FF_OP_LAYOUTSTATS = 0,
+ NFS4_FF_OP_LAYOUTRETURN = 1,
+};
+
+struct nlm_share;
+
+struct nlm_file {
+ struct hlist_node f_list;
+ struct nfs_fh f_handle;
+ struct file *f_file[2];
+ struct nlm_share *f_shares;
+ struct list_head f_blocks;
+ unsigned int f_locks;
+ unsigned int f_count;
+ struct mutex f_mutex;
+};
+
+struct nlm_share {
+ struct nlm_share *s_next;
+ struct nlm_host *s_host;
+ struct nlm_file *s_file;
+ struct xdr_netobj s_owner;
+ u32 s_access;
+ u32 s_mode;
+};
+
+typedef int (*nlm_host_match_fn_t)(void *, struct nlm_host *);
+
+struct nlmsvc_binding {
+ __be32 (*fopen)(struct svc_rqst *, struct nfs_fh *, struct file **, int);
+ void (*fclose)(struct file *);
+};
+
+struct nlm_block;
+
+struct nlm_rqst {
+ refcount_t a_count;
+ unsigned int a_flags;
+ struct nlm_host *a_host;
+ struct nlm_args a_args;
+ struct nlm_res a_res;
+ struct nlm_block *a_block;
+ unsigned int a_retries;
+ u8 a_owner[74];
+ void *a_callback_data;
+};
+
+struct nlm_block {
+ struct kref b_count;
+ struct list_head b_list;
+ struct list_head b_flist;
+ struct nlm_rqst *b_call;
+ struct svc_serv *b_daemon;
+ struct nlm_host *b_host;
+ long unsigned int b_when;
+ unsigned int b_id;
+ unsigned char b_granted;
+ struct nlm_file *b_file;
+ struct cache_req *b_cache_req;
+ struct cache_deferred_req *b_deferred_req;
+ unsigned int b_flags;
+};
+
+struct p9_rstatfs {
+ u32 type;
+ u32 bsize;
+ u64 blocks;
+ u64 bfree;
+ u64 bavail;
+ u64 files;
+ u64 ffree;
+ u64 fsid;
+ u32 namelen;
+};
+
+enum p9_session_flags {
+ V9FS_PROTO_2000U = 1,
+ V9FS_PROTO_2000L = 2,
+ V9FS_ACCESS_SINGLE = 4,
+ V9FS_ACCESS_USER = 8,
+ V9FS_ACCESS_CLIENT = 16,
+ V9FS_POSIX_ACL = 32,
+ V9FS_NO_XATTR = 64,
+ V9FS_IGNORE_QV = 128,
+ V9FS_DIRECT_IO = 256,
+ V9FS_SYNC = 512,
+};
+
+enum p9_cache_bits {
+ CACHE_NONE = 0,
+ CACHE_FILE = 1,
+ CACHE_META = 2,
+ CACHE_WRITEBACK = 4,
+ CACHE_LOOSE = 8,
+ CACHE_FSCACHE = 128,
+};
+
+struct v9fs_session_info {
+ unsigned int flags;
+ unsigned char nodev;
+ short unsigned int debug;
+ unsigned int afid;
+ unsigned int cache;
+ char *uname;
+ char *aname;
+ unsigned int maxdata;
+ kuid_t dfltuid;
+ kgid_t dfltgid;
+ kuid_t uid;
+ struct p9_client *clnt;
+ struct list_head slist;
+ struct rw_semaphore rename_sem;
+ long int session_lock_timeout;
+};
+
+struct p9_fcall {
+ u32 size;
+ u8 id;
+ u16 tag;
+ size_t offset;
+ size_t capacity;
+ struct kmem_cache *cache;
+ u8 *sdata;
+ bool zc;
+};
+
+struct p9_req_t {
+ int status;
+ int t_err;
+ refcount_t refcount;
+ wait_queue_head_t wq;
+ struct p9_fcall tc;
+ struct p9_fcall rc;
+ struct list_head req_list;
+};
+
+struct p9_trans_module {
+ struct list_head list;
+ char *name;
+ int maxsize;
+ bool pooled_rbuffers;
+ int def;
+ struct module *owner;
+ int (*create)(struct p9_client *, const char *, char *);
+ void (*close)(struct p9_client *);
+ int (*request)(struct p9_client *, struct p9_req_t *);
+ int (*cancel)(struct p9_client *, struct p9_req_t *);
+ int (*cancelled)(struct p9_client *, struct p9_req_t *);
+ int (*zc_request)(struct p9_client *, struct p9_req_t *, struct iov_iter *, struct iov_iter *, int, int, int);
+ int (*show_options)(struct seq_file *, struct p9_client *);
+};
+
+enum p9_cache_shortcuts {
+ CACHE_SC_NONE = 0,
+ CACHE_SC_READAHEAD = 1,
+ CACHE_SC_MMAP = 5,
+ CACHE_SC_LOOSE = 15,
+ CACHE_SC_FSCACHE = 143,
+};
+
+struct v9fs_inode {
+ struct netfs_inode netfs;
+ struct p9_qid qid;
+ unsigned int cache_validity;
+ struct mutex v_mutex;
+};
+
+enum {
+ Opt_debug = 0,
+ Opt_dfltuid = 1,
+ Opt_dfltgid = 2,
+ Opt_afid = 3,
+ Opt_uname = 4,
+ Opt_remotename = 5,
+ Opt_cache = 6,
+ Opt_cachetag = 7,
+ Opt_nodevmap = 8,
+ Opt_noxattr = 9,
+ Opt_directio = 10,
+ Opt_ignoreqv = 11,
+ Opt_access = 12,
+ Opt_posixacl = 13,
+ Opt_locktimeout = 14,
+ Opt_err = 15,
+};
+
+typedef unsigned int __kernel_mode_t;
+
+typedef __kernel_long_t __kernel_old_time_t;
+
+struct ipc_perm {
+ __kernel_key_t key;
+ __kernel_uid_t uid;
+ __kernel_gid_t gid;
+ __kernel_uid_t cuid;
+ __kernel_gid_t cgid;
+ __kernel_mode_t mode;
+ short unsigned int seq;
+};
+
+struct ipc64_perm {
+ __kernel_key_t key;
+ __kernel_uid32_t uid;
+ __kernel_gid32_t gid;
+ __kernel_uid32_t cuid;
+ __kernel_gid32_t cgid;
+ __kernel_mode_t mode;
+ unsigned char __pad1[0];
+ short unsigned int seq;
+ short unsigned int __pad2;
+ __kernel_ulong_t __unused1;
+ __kernel_ulong_t __unused2;
+};
+
+struct sem;
+
+struct sem_queue;
+
+struct sem_undo;
+
+struct semid_ds {
+ struct ipc_perm sem_perm;
+ __kernel_old_time_t sem_otime;
+ __kernel_old_time_t sem_ctime;
+ struct sem *sem_base;
+ struct sem_queue *sem_pending;
+ struct sem_queue **sem_pending_last;
+ struct sem_undo *undo;
+ short unsigned int sem_nsems;
+};
+
+struct sem {
+ int semval;
+ struct pid *sempid;
+ spinlock_t lock;
+ struct list_head pending_alter;
+ struct list_head pending_const;
+ time64_t sem_otime;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct sem_queue {
+ struct list_head list;
+ struct task_struct *sleeper;
+ struct sem_undo *undo;
+ struct pid *pid;
+ int status;
+ struct sembuf *sops;
+ struct sembuf *blocking;
+ int nsops;
+ bool alter;
+ bool dupsop;
+};
+
+struct sem_undo {
+ struct list_head list_proc;
+ struct callback_head rcu;
+ struct sem_undo_list *ulp;
+ struct list_head list_id;
+ int semid;
+ short int semadj[0];
+};
+
+struct semid64_ds {
+ struct ipc64_perm sem_perm;
+ long int sem_otime;
+ long int sem_ctime;
+ long unsigned int sem_nsems;
+ long unsigned int __unused3;
+ long unsigned int __unused4;
+};
+
+struct seminfo {
+ int semmap;
+ int semmni;
+ int semmns;
+ int semmnu;
+ int semmsl;
+ int semopm;
+ int semume;
+ int semusz;
+ int semvmx;
+ int semaem;
+};
+
+struct sem_undo_list {
+ refcount_t refcnt;
+ spinlock_t lock;
+ struct list_head list_proc;
+};
+
+typedef s32 compat_key_t;
+
+typedef u16 compat_ushort_t;
+
+typedef u32 __compat_gid32_t;
+
+typedef u32 compat_mode_t;
+
+struct compat_ipc64_perm {
+ compat_key_t key;
+ __compat_uid32_t uid;
+ __compat_gid32_t gid;
+ __compat_uid32_t cuid;
+ __compat_gid32_t cgid;
+ compat_mode_t mode;
+ unsigned char __pad1[0];
+ compat_ushort_t seq;
+ compat_ushort_t __pad2;
+ compat_ulong_t unused1;
+ compat_ulong_t unused2;
+};
+
+struct compat_semid64_ds {
+ struct compat_ipc64_perm sem_perm;
+ compat_ulong_t sem_otime;
+ compat_ulong_t sem_otime_high;
+ compat_ulong_t sem_ctime;
+ compat_ulong_t sem_ctime_high;
+ compat_ulong_t sem_nsems;
+ compat_ulong_t __unused3;
+ compat_ulong_t __unused4;
+};
+
+struct ipc_params {
+ key_t key;
+ int flg;
+ union {
+ size_t size;
+ int nsems;
+ } u;
+};
+
+struct ipc_ops {
+ int (*getnew)(struct ipc_namespace *, struct ipc_params *);
+ int (*associate)(struct kern_ipc_perm *, int);
+ int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);
+};
+
+struct compat_ipc_perm {
+ key_t key;
+ __compat_uid_t uid;
+ __compat_gid_t gid;
+ __compat_uid_t cuid;
+ __compat_gid_t cgid;
+ compat_mode_t mode;
+ short unsigned int seq;
+};
+
+struct sem_array {
+ struct kern_ipc_perm sem_perm;
+ time64_t sem_ctime;
+ struct list_head pending_alter;
+ struct list_head pending_const;
+ struct list_head list_id;
+ int sem_nsems;
+ int complex_count;
+ unsigned int use_global_lock;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct sem sems[0];
+};
+
+struct compat_semid_ds {
+ struct compat_ipc_perm sem_perm;
+ old_time32_t sem_otime;
+ old_time32_t sem_ctime;
+ compat_uptr_t sem_base;
+ compat_uptr_t sem_pending;
+ compat_uptr_t sem_pending_last;
+ compat_uptr_t undo;
+ short unsigned int sem_nsems;
+};
+
+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;
+};
+
+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];
+};
+
+struct keyctl_dh_params {
+ union {
+ __s32 private;
+ __s32 priv;
+ };
+ __s32 prime;
+ __s32 base;
+};
+
+struct keyctl_kdf_params {
+ char *hashname;
+ char *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 selinux_policy_convert_data;
+
+struct selinux_load_state {
+ struct selinux_policy *policy;
+ struct selinux_policy_convert_data *convert_data;
+};
+
+struct avc_cache_stats {
+ unsigned int lookups;
+ unsigned int misses;
+ unsigned int allocations;
+ unsigned int reclaims;
+ unsigned int frees;
+};
+
+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;
+ long unsigned int last_class_ino;
+ bool policy_opened;
+ struct dentry *policycap_dir;
+ long unsigned int last_ino;
+ struct super_block *sb;
+};
+
+struct policy_load_memory {
+ size_t len;
+ void *data;
+};
+
+struct hashtab_node {
+ void *key;
+ void *datum;
+ struct hashtab_node *next;
+};
+
+struct hashtab {
+ struct hashtab_node **htable;
+ u32 size;
+ u32 nel;
+};
+
+struct extended_perms_data {
+ u32 p[8];
+};
+
+struct ebitmap_node {
+ struct ebitmap_node *next;
+ long unsigned int maps[6];
+ u32 startbit;
+};
+
+struct ebitmap {
+ struct ebitmap_node *node;
+ u32 highbit;
+};
+
+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 *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_node_inner {
+ union sidtab_entry_inner entries[512];
+};
+
+struct sidtab_node_leaf {
+ struct sidtab_entry entries[39];
+};
+
+struct sidtab_isid_entry {
+ int set;
+ struct sidtab_entry entry;
+};
+
+struct convert_context_args;
+
+struct sidtab;
+
+struct sidtab_convert_params {
+ struct convert_context_args *args;
+ struct sidtab *target;
+};
+
+struct policydb;
+
+struct convert_context_args {
+ struct policydb *oldp;
+ struct policydb *newp;
+};
+
+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 symtab {
+ struct hashtab table;
+ u32 nprim;
+};
+
+struct avtab_key {
+ u16 source_type;
+ u16 target_type;
+ u16 target_class;
+ u16 specified;
+};
+
+struct avtab_extended_perms {
+ u8 specified;
+ u8 driver;
+ struct extended_perms_data 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 {
+ struct avtab_node **htable;
+ u32 nel;
+ u32 nslot;
+ u32 mask;
+};
+
+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 constraint_node {
+ u32 permissions;
+ struct constraint_expr *expr;
+ struct constraint_node *next;
+};
+
+struct common_datum {
+ u32 value;
+ struct symtab permissions;
+};
+
+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 role_datum {
+ u32 value;
+ u32 bounds;
+ struct ebitmap dominates;
+ struct ebitmap types;
+};
+
+struct role_allow {
+ u32 role;
+ u32 new_role;
+ struct role_allow *next;
+};
+
+struct type_datum {
+ u32 value;
+ u32 bounds;
+ unsigned char primary;
+ unsigned char attribute;
+};
+
+struct user_datum {
+ u32 value;
+ u32 bounds;
+ struct ebitmap roles;
+ struct mls_range range;
+ struct mls_level dfltlevel;
+};
+
+struct cond_bool_datum {
+ __u32 value;
+ int state;
+};
+
+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 cond_node;
+
+struct policydb {
+ int mls_enabled;
+ 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;
+};
+
+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,
+};
+
+enum label_flags {
+ FLAG_HAT = 1,
+ FLAG_UNCONFINED = 2,
+ FLAG_NULL = 4,
+ FLAG_IX_ON_NAME_ERROR = 8,
+ FLAG_IMMUTIBLE = 16,
+ FLAG_USER_DEFINED = 32,
+ FLAG_NO_LIST_REF = 64,
+ FLAG_NS_COUNT = 128,
+ FLAG_IN_TREE = 256,
+ FLAG_PROFILE = 512,
+ FLAG_EXPLICIT = 1024,
+ FLAG_STALE = 2048,
+ FLAG_RENAMED = 4096,
+ FLAG_REVOKED = 8192,
+ FLAG_DEBUG1 = 16384,
+ FLAG_DEBUG2 = 32768,
+};
+
+struct aa_audit_rule {
+ struct aa_label *label;
+};
+
+struct label_it {
+ int i;
+ int j;
+};
+
+struct path_cond {
+ kuid_t uid;
+ umode_t mode;
+};
+
+struct aa_task_ctx {
+ struct aa_label *nnp;
+ struct aa_label *onexec;
+ struct aa_label *previous;
+ u64 token;
+};
+
+struct lskcipher_alg {
+ int (*setkey)(struct crypto_lskcipher *, const u8 *, unsigned int);
+ int (*encrypt)(struct crypto_lskcipher *, const u8 *, u8 *, unsigned int, u8 *, u32);
+ int (*decrypt)(struct crypto_lskcipher *, const u8 *, u8 *, unsigned int, u8 *, u32);
+ int (*init)(struct crypto_lskcipher *);
+ void (*exit)(struct crypto_lskcipher *);
+ struct skcipher_alg_common co;
+};
+
+struct lskcipher_instance {
+ void (*free)(struct lskcipher_instance *);
+ union {
+ struct {
+ char head[64];
+ struct crypto_instance base;
+ } s;
+ struct lskcipher_alg alg;
+ };
+};
+
+struct crypto_lskcipher_spawn {
+ struct crypto_spawn base;
+};
+
+enum asn1_class {
+ ASN1_UNIV = 0,
+ ASN1_APPL = 1,
+ ASN1_CONT = 2,
+ ASN1_PRIV = 3,
+};
+
+enum asn1_method {
+ ASN1_PRIM = 0,
+ ASN1_CONS = 1,
+};
+
+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,
+};
+
+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 rsapubkey_actions {
+ ACT_rsa_get_e = 0,
+ ACT_rsa_get_n = 1,
+ NR__rsapubkey_actions = 2,
+};
+
+enum rsaprivkey_actions {
+ ACT_rsa_get_d = 0,
+ ACT_rsa_get_dp = 1,
+ ACT_rsa_get_dq = 2,
+ ACT_rsa_get_e___2 = 3,
+ ACT_rsa_get_n___2 = 4,
+ ACT_rsa_get_p = 5,
+ ACT_rsa_get_q = 6,
+ ACT_rsa_get_qinv = 7,
+ NR__rsaprivkey_actions = 8,
+};
+
+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 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 rsa_mpi_key {
+ MPI n;
+ MPI e;
+ MPI d;
+ MPI p;
+ MPI q;
+ MPI dp;
+ MPI dq;
+ MPI qinv;
+};
+
+struct bvec_iter_all {
+ struct bio_vec bv;
+ int idx;
+ unsigned int done;
+};
+
+enum {
+ BIOSET_NEED_BVECS = 1,
+ BIOSET_NEED_RESCUER = 2,
+ BIOSET_PERCPU_CACHE = 4,
+};
+
+struct bio_alloc_cache {
+ struct bio *free_list;
+ struct bio *free_list_irq;
+ unsigned int nr;
+ unsigned int nr_irq;
+};
+
+struct bio_integrity_payload {
+ struct bio *bip_bio;
+ struct bvec_iter bip_iter;
+ short unsigned int bip_vcnt;
+ short unsigned int bip_max_vcnt;
+ short unsigned int 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];
+};
+
+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 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 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 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;
+ long unsigned int first_pending_disptime;
+ struct timer_list pending_timer;
+};
+
+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;
+ bool track_bio_latency;
+};
+
+struct blkg_conf_ctx {
+ char *input;
+ char *body;
+ struct block_device *bdev;
+ struct blkcg_gq *blkg;
+};
+
+struct throtl_grp;
+
+struct throtl_qnode {
+ struct list_head node;
+ struct bio_list bios;
+ struct throtl_grp *tg;
+};
+
+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];
+ long unsigned int disptime;
+ unsigned int flags;
+ bool has_rules_bps[2];
+ bool has_rules_iops[2];
+ uint64_t bps[2];
+ unsigned int iops[2];
+ uint64_t bytes_disp[2];
+ unsigned int io_disp[2];
+ uint64_t last_bytes_disp[2];
+ unsigned int last_io_disp[2];
+ long long int carryover_bytes[2];
+ int carryover_ios[2];
+ long unsigned int last_check_time;
+ long unsigned int slice_start[2];
+ long unsigned int slice_end[2];
+ struct blkg_rwstat stat_bytes;
+ struct blkg_rwstat stat_ios;
+};
+
+enum tg_state_flags {
+ THROTL_TG_PENDING = 1,
+ THROTL_TG_WAS_EMPTY = 2,
+ THROTL_TG_CANCELING = 4,
+};
+
+struct io_uring_rsrc_register {
+ __u32 nr;
+ __u32 flags;
+ __u64 resv2;
+ __u64 data;
+ __u64 tags;
+};
+
+struct io_uring_rsrc_update2 {
+ __u32 offset;
+ __u32 resv;
+ __u64 data;
+ __u64 tags;
+ __u32 nr;
+ __u32 resv2;
+};
+
+enum {
+ IORING_REGISTER_SRC_REGISTERED = 1,
+};
+
+struct io_uring_clone_buffers {
+ __u32 src_fd;
+ __u32 flags;
+ __u32 pad[6];
+};
+
+struct io_imu_folio_data {
+ unsigned int nr_pages_head;
+ unsigned int nr_pages_mid;
+ unsigned int folio_shift;
+};
+
+struct io_rsrc_update {
+ struct file *file;
+ u64 arg;
+ u32 nr_args;
+ u32 offset;
+};
+
+struct io_open {
+ struct file *file;
+ int dfd;
+ u32 file_slot;
+ struct filename *filename;
+ struct open_how how;
+ long unsigned int nofile;
+};
+
+struct io_close {
+ struct file *file;
+ int fd;
+ u32 file_slot;
+};
+
+struct io_fixed_install {
+ struct file *file;
+ unsigned int o_flags;
+};
+
+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_cancel_data {
+ struct io_ring_ctx *ctx;
+ union {
+ u64 data;
+ struct file *file;
+ };
+ u8 opcode;
+ u32 flags;
+ int seq;
+};
+
+struct io_timeout_data {
+ struct io_kiocb *req;
+ struct hrtimer timer;
+ struct timespec64 ts;
+ enum hrtimer_mode mode;
+ 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_futex {
+ struct file *file;
+ union {
+ u32 *uaddr;
+ struct futex_waitv *uwaitv;
+ };
+ long unsigned int futex_val;
+ long unsigned int futex_mask;
+ long unsigned int futexv_owned;
+ u32 futex_flags;
+ unsigned int futex_nr;
+ bool futexv_unqueued;
+};
+
+struct io_futex_data {
+ struct futex_q q;
+ struct io_kiocb *req;
+};
+
+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 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;
+};
+
+typedef enum {
+ trustInput = 0,
+ checkMaxSymbolValue = 1,
+} HIST_checkInput_e;
+
+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 struct {
+ U16 base;
+ U16 curr;
+} rankPos;
+
+typedef nodeElt huffNodeTable[512];
+
+typedef struct {
+ huffNodeTable huffNodeTbl;
+ rankPos rankPosition[192];
+} HUF_buildCTable_wksp_tables;
+
+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 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;
+
+enum xz_mode {
+ XZ_SINGLE = 0,
+ XZ_PREALLOC = 1,
+ XZ_DYNALLOC = 2,
+};
+
+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,
+};
+
+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;
+};
+
+typedef uint64_t vli_type;
+
+enum xz_check {
+ XZ_CHECK_NONE = 0,
+ XZ_CHECK_CRC32 = 1,
+ XZ_CHECK_CRC64 = 4,
+ XZ_CHECK_SHA256 = 10,
+};
+
+struct xz_dec_hash {
+ vli_type unpadded;
+ vli_type uncompressed;
+ uint32_t crc32;
+};
+
+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;
+};
+
+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 dim_sample {
+ ktime_t time;
+ u32 pkt_ctr;
+ u32 byte_ctr;
+ u16 event_ctr;
+ u32 comp_ctr;
+};
+
+struct dim_stats {
+ int ppms;
+ int bpms;
+ int epms;
+ int cpms;
+ int cpe_ratio;
+};
+
+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;
+};
+
+enum dim_tune_state {
+ DIM_PARKING_ON_TOP = 0,
+ DIM_PARKING_TIRED = 1,
+ DIM_GOING_RIGHT = 2,
+ DIM_GOING_LEFT = 3,
+};
+
+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_sha1WithRSAEncryption = 11,
+ OID_sha256WithRSAEncryption = 12,
+ OID_sha384WithRSAEncryption = 13,
+ OID_sha512WithRSAEncryption = 14,
+ OID_sha224WithRSAEncryption = 15,
+ OID_data = 16,
+ OID_signed_data = 17,
+ OID_email_address = 18,
+ OID_contentType = 19,
+ OID_messageDigest = 20,
+ OID_signingTime = 21,
+ OID_smimeCapabilites = 22,
+ OID_smimeAuthenticatedAttrs = 23,
+ OID_mskrb5 = 24,
+ OID_krb5 = 25,
+ OID_krb5u2u = 26,
+ OID_msIndirectData = 27,
+ OID_msStatementType = 28,
+ OID_msSpOpusInfo = 29,
+ OID_msPeImageDataObjId = 30,
+ OID_msIndividualSPKeyPurpose = 31,
+ OID_msOutlookExpress = 32,
+ OID_ntlmssp = 33,
+ OID_negoex = 34,
+ OID_spnego = 35,
+ OID_IAKerb = 36,
+ OID_PKU2U = 37,
+ OID_Scram = 38,
+ OID_certAuthInfoAccess = 39,
+ OID_sha1 = 40,
+ OID_id_ansip384r1 = 41,
+ OID_id_ansip521r1 = 42,
+ OID_sha256 = 43,
+ OID_sha384 = 44,
+ OID_sha512 = 45,
+ OID_sha224 = 46,
+ OID_commonName = 47,
+ OID_surname = 48,
+ OID_countryName = 49,
+ OID_locality = 50,
+ OID_stateOrProvinceName = 51,
+ OID_organizationName = 52,
+ OID_organizationUnitName = 53,
+ OID_title = 54,
+ OID_description = 55,
+ OID_name = 56,
+ OID_givenName = 57,
+ OID_initials = 58,
+ OID_generationalQualifier = 59,
+ OID_subjectKeyIdentifier = 60,
+ OID_keyUsage = 61,
+ OID_subjectAltName = 62,
+ OID_issuerAltName = 63,
+ OID_basicConstraints = 64,
+ OID_crlDistributionPoints = 65,
+ OID_certPolicies = 66,
+ OID_authorityKeyIdentifier = 67,
+ OID_extKeyUsage = 68,
+ OID_NetlogonMechanism = 69,
+ OID_appleLocalKdcSupported = 70,
+ OID_gostCPSignA = 71,
+ OID_gostCPSignB = 72,
+ OID_gostCPSignC = 73,
+ OID_gost2012PKey256 = 74,
+ OID_gost2012PKey512 = 75,
+ OID_gost2012Digest256 = 76,
+ OID_gost2012Digest512 = 77,
+ OID_gost2012Signature256 = 78,
+ OID_gost2012Signature512 = 79,
+ OID_gostTC26Sign256A = 80,
+ OID_gostTC26Sign256B = 81,
+ OID_gostTC26Sign256C = 82,
+ OID_gostTC26Sign256D = 83,
+ OID_gostTC26Sign512A = 84,
+ OID_gostTC26Sign512B = 85,
+ OID_gostTC26Sign512C = 86,
+ OID_sm2 = 87,
+ OID_sm3 = 88,
+ OID_SM2_with_SM3 = 89,
+ OID_sm3WithRSAEncryption = 90,
+ OID_TPMLoadableKey = 91,
+ OID_TPMImportableKey = 92,
+ OID_TPMSealedData = 93,
+ OID_sha3_256 = 94,
+ OID_sha3_384 = 95,
+ OID_sha3_512 = 96,
+ OID_id_ecdsa_with_sha3_256 = 97,
+ OID_id_ecdsa_with_sha3_384 = 98,
+ OID_id_ecdsa_with_sha3_512 = 99,
+ OID_id_rsassa_pkcs1_v1_5_with_sha3_256 = 100,
+ OID_id_rsassa_pkcs1_v1_5_with_sha3_384 = 101,
+ OID_id_rsassa_pkcs1_v1_5_with_sha3_512 = 102,
+ OID__NR = 103,
+};
+
+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 *);
+
+enum {
+ IRQ_SET_MASK_OK = 0,
+ IRQ_SET_MASK_OK_NOCOPY = 1,
+ IRQ_SET_MASK_OK_DONE = 2,
+};
+
+struct imsic_vector {
+ unsigned int cpu;
+ unsigned int local_id;
+ unsigned int hwirq;
+ bool enable;
+ struct imsic_vector *move;
+};
+
+struct imsic_local_priv {
+ raw_spinlock_t lock;
+ long unsigned int *dirty_bitmap;
+ struct timer_list timer;
+ struct imsic_vector *vectors;
+};
+
+struct imsic_priv {
+ struct fwnode_handle *fwnode;
+ struct imsic_global_config global;
+ struct imsic_local_priv *lpriv;
+ raw_spinlock_t matrix_lock;
+ struct irq_matrix *matrix;
+ struct irq_domain *base_domain;
+};
+
+struct pinfunction {
+ const char *name;
+ const char * const *groups;
+ size_t ngroups;
+};
+
+struct pinctrl_setting_mux {
+ unsigned int group;
+ unsigned int func;
+};
+
+struct pinctrl_setting_configs {
+ unsigned int group_or_pin;
+ long unsigned int *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 function_desc {
+ struct pinfunction func;
+ void *data;
+};
+
+enum cv1800_pin_io_type {
+ IO_TYPE_1V8_ONLY = 0,
+ IO_TYPE_1V8_OR_3V3 = 1,
+ IO_TYPE_AUDIO = 2,
+ IO_TYPE_ETH = 3,
+};
+
+struct cv1800_pinmux {
+ u16 offset;
+ u8 area;
+ u8 max;
+};
+
+struct cv1800_pinmux2 {
+ u16 offset;
+ u8 area;
+ u8 max;
+ u8 pfunc;
+};
+
+struct cv1800_pinconf {
+ u16 offset;
+ u8 area;
+};
+
+struct cv1800_pin {
+ u16 pin;
+ u16 flags;
+ u8 power_domain;
+ struct cv1800_pinmux mux;
+ struct cv1800_pinmux2 mux2;
+ struct cv1800_pinconf conf;
+};
+
+struct cv1800_vddio_cfg_ops {
+ int (*get_pull_up)(struct cv1800_pin *, const u32 *);
+ int (*get_pull_down)(struct cv1800_pin *, const u32 *);
+ int (*get_oc_map)(struct cv1800_pin *, const u32 *, const u32 **);
+ int (*get_schmitt_map)(struct cv1800_pin *, const u32 *, const u32 **);
+};
+
+struct cv1800_pinctrl_data {
+ const struct pinctrl_pin_desc *pins;
+ const struct cv1800_pin *pindata;
+ const char * const *pdnames;
+ const struct cv1800_vddio_cfg_ops *vddio_ops;
+ u16 npins;
+ u16 npd;
+};
+
+enum SG2002_POWER_DOMAIN {
+ VDD18A_MIPI = 0,
+ VDD18A_USB_PLL_ETH = 1,
+ VDDIO_RTC = 2,
+ VDDIO_SD0_EMMC = 3,
+ VDDIO_SD1 = 4,
+};
+
+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;
+ long unsigned int *get_mask;
+ long unsigned int *set_mask;
+ long unsigned int invert_mask[0];
+};
+
+struct walk_rcec_data {
+ struct pci_dev *rcec;
+ int (*user_callback)(struct pci_dev *, void *);
+ void *user_data;
+};
+
+enum pci_interrupt_pin {
+ PCI_INTERRUPT_UNKNOWN = 0,
+ PCI_INTERRUPT_INTA = 1,
+ PCI_INTERRUPT_INTB = 2,
+ PCI_INTERRUPT_INTC = 3,
+ PCI_INTERRUPT_INTD = 4,
+};
+
+struct xilinx_pcie {
+ struct device *dev;
+ void *reg_base;
+ long unsigned int msi_map[2];
+ struct mutex map_lock;
+ struct irq_domain *msi_domain;
+ struct irq_domain *leg_domain;
+ struct list_head resources;
+};
+
+struct dp_sdp_header {
+ u8 HB0;
+ u8 HB1;
+ u8 HB2;
+ u8 HB3;
+};
+
+struct dp_sdp {
+ struct dp_sdp_header sdp_header;
+ u8 db[32];
+};
+
+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,
+};
+
+struct hdmi_any_infoframe {
+ enum hdmi_infoframe_type type;
+ unsigned char version;
+ unsigned char length;
+};
+
+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_metadata_type {
+ HDMI_STATIC_METADATA_TYPE1 = 0,
+};
+
+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,
+};
+
+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;
+ short unsigned int top_bar;
+ short unsigned int bottom_bar;
+ short unsigned int left_bar;
+ short unsigned int right_bar;
+};
+
+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;
+};
+
+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,
+};
+
+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;
+};
+
+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,
+};
+
+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;
+};
+
+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,
+};
+
+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;
+};
+
+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;
+};
+
+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;
+};
+
+struct fb_modelist {
+ struct list_head list;
+ struct fb_videomode mode;
+};
+
+struct acpi_pci_id {
+ u16 segment;
+ u16 bus;
+ u16 device;
+ u16 function;
+};
+
+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];
+ };
+ };
+};
+
+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_RINTC = 6,
+ ACPI_IRQ_MODEL_COUNT = 7,
+};
+
+struct acpi_prt_entry {
+ struct acpi_pci_id id;
+ u8 pin;
+ acpi_handle link;
+ u32 index;
+};
+
+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_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;
+};
+
+enum {
+ ACPI_GENL_ATTR_UNSPEC = 0,
+ ACPI_GENL_ATTR_EVENT = 1,
+ __ACPI_GENL_ATTR_MAX = 2,
+};
+
+enum {
+ ACPI_GENL_CMD_UNSPEC = 0,
+ ACPI_GENL_CMD_EVENT = 1,
+ __ACPI_GENL_CMD_MAX = 2,
+};
+
+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;
+};
+
+typedef u32 acpi_name;
+
+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_exception_info {
+ char *name;
+};
+
+struct acpi_rw_lock {
+ void *writer_mutex;
+ void *reader_mutex;
+ u32 num_readers;
+};
+
+struct acpi_mutex_info {
+ void *mutex;
+ u32 use_count;
+ u64 thread_id;
+};
+
+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 cpu_cacheinfo {
+ struct cacheinfo *info_list;
+ unsigned int per_cpu_data_slice_size;
+ unsigned int num_levels;
+ unsigned int num_leaves;
+ bool cpu_map_populated;
+ bool early_ci_levels;
+};
+
+enum acpi_pptt_type {
+ ACPI_PPTT_TYPE_PROCESSOR = 0,
+ ACPI_PPTT_TYPE_CACHE = 1,
+ ACPI_PPTT_TYPE_ID = 2,
+ ACPI_PPTT_TYPE_RESERVED = 3,
+};
+
+struct acpi_pptt_processor {
+ struct acpi_subtable_header header;
+ u16 reserved;
+ u32 flags;
+ u32 parent;
+ u32 acpi_processor_id;
+ u32 number_of_priv_resources;
+};
+
+struct acpi_pptt_cache {
+ struct acpi_subtable_header header;
+ u16 reserved;
+ u32 flags;
+ u32 next_level_of_cache;
+ u32 size;
+ u32 number_of_sets;
+ u8 associativity;
+ u8 attributes;
+ u16 line_size;
+};
+
+struct acpi_pptt_cache_v1 {
+ u32 cache_id;
+};
+
+typedef u64 phys_cpuid_t;
+
+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_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_psd_package {
+ u64 num_entries;
+ u64 revision;
+ u64 domain;
+ u64 coord_type;
+ u64 num_processors;
+};
+
+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_processor_px {
+ u64 core_frequency;
+ u64 power;
+ u64 transition_latency;
+ u64 bus_master_latency;
+ u64 control;
+ u64 status;
+};
+
+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_tsd_package {
+ u64 num_entries;
+ u64 revision;
+ u64 domain;
+ u64 coord_type;
+ u64 num_processors;
+};
+
+struct acpi_processor_tx_tss {
+ u64 freqpercentage;
+ u64 power;
+ u64 transition_latency;
+ u64 control;
+ u64 status;
+};
+
+struct acpi_processor_tx {
+ u16 power;
+ u16 performance;
+};
+
+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_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 previously_online: 1;
+};
+
+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 {
+ 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 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 {
+ struct clk_core *core;
+ struct device *dev;
+ const char *dev_id;
+ const char *con_id;
+ long unsigned int min_rate;
+ long unsigned int max_rate;
+ unsigned int exclusive_count;
+ struct hlist_node clks_node;
+};
+
+struct cv1800_clk_pll_limit {
+ struct {
+ u8 min;
+ u8 max;
+ } pre_div;
+ struct {
+ u8 min;
+ u8 max;
+ } div;
+ struct {
+ u8 min;
+ u8 max;
+ } post_div;
+ struct {
+ u8 min;
+ u8 max;
+ } ictrl;
+ struct {
+ u8 min;
+ u8 max;
+ } mode;
+};
+
+struct cv1800_clk_pll_synthesizer {
+ struct cv1800_clk_regbit en;
+ struct cv1800_clk_regbit clk_half;
+ u32 ctrl;
+ u32 set;
+};
+
+struct cv1800_clk_pll {
+ struct cv1800_clk_common common;
+ u32 pll_reg;
+ struct cv1800_clk_regbit pll_pwd;
+ struct cv1800_clk_regbit pll_status;
+ const struct cv1800_clk_pll_limit *pll_limit;
+ struct cv1800_clk_pll_synthesizer *pll_syn;
+};
+
+enum jh7110_pll_mode {
+ JH7110_PLL_MODE_FRACTION = 0,
+ JH7110_PLL_MODE_INTEGER = 1,
+};
+
+struct jh7110_pll_preset {
+ long unsigned int freq;
+ u32 frac;
+ unsigned int fbdiv: 12;
+ unsigned int prediv: 6;
+ unsigned int postdiv1: 2;
+ unsigned int mode: 1;
+};
+
+struct jh7110_pll_info {
+ char *name;
+ const struct jh7110_pll_preset *presets;
+ unsigned int npresets;
+ struct {
+ unsigned int pd;
+ unsigned int fbdiv;
+ unsigned int frac;
+ unsigned int prediv;
+ } offsets;
+ struct {
+ u32 dacpd;
+ u32 dsmpd;
+ u32 fbdiv;
+ } masks;
+ struct {
+ char dacpd;
+ char dsmpd;
+ char fbdiv;
+ } shifts;
+};
+
+struct jh7110_pll_data {
+ struct clk_hw hw;
+ unsigned int idx;
+};
+
+struct jh7110_pll_priv {
+ struct device *dev;
+ struct regmap *regmap;
+ struct jh7110_pll_data pll[3];
+};
+
+struct jh7110_pll_regvals {
+ u32 dacpd;
+ u32 dsmpd;
+ u32 fbdiv;
+ u32 frac;
+ u32 postdiv1;
+ u32 prediv;
+};
+
+struct ccu_mux_fixed_prediv {
+ u8 index;
+ u16 div;
+};
+
+struct ccu_mux_var_prediv {
+ u8 index;
+ u8 shift;
+ u8 width;
+};
+
+struct ccu_mux_internal {
+ u8 shift;
+ u8 width;
+ const u8 *table;
+ const struct ccu_mux_fixed_prediv *fixed_predivs;
+ u8 n_predivs;
+ const struct ccu_mux_var_prediv *var_predivs;
+ u8 n_var_predivs;
+};
+
+struct ccu_div_internal___2 {
+ u8 shift;
+ u8 width;
+ u32 max;
+ u32 offset;
+ u32 flags;
+ struct clk_div_table *table;
+};
+
+struct ccu_mp {
+ u32 enable;
+ struct ccu_div_internal___2 m;
+ struct ccu_div_internal___2 p;
+ struct ccu_mux_internal mux;
+ unsigned int fixed_post_div;
+ struct ccu_common common;
+};
+
+struct dma_chan_tbl_ent {
+ struct dma_chan *chan;
+};
+
+struct dmaengine_unmap_pool {
+ struct kmem_cache *cache;
+ const char *name;
+ mempool_t *pool;
+ size_t size;
+};
+
+struct regulator_err_state {
+ struct regulator_dev *rdev;
+ long unsigned int notifs;
+ long unsigned int errors;
+ int possible_errs;
+};
+
+struct regulator_irq_data {
+ struct regulator_err_state *states;
+ int num_states;
+ void *data;
+ long int opaque;
+};
+
+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 *, long unsigned int *);
+ int (*renable)(struct regulator_irq_data *);
+};
+
+enum regulator_get_type {
+ NORMAL_GET = 0,
+ EXCLUSIVE_GET = 1,
+ OPTIONAL_GET = 2,
+ MAX_GET_TYPE = 3,
+};
+
+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_notifier_match {
+ struct regulator *regulator;
+ struct notifier_block *nb;
+};
+
+struct gpio_regulator_state {
+ int value;
+ int gpios;
+};
+
+struct gpio_regulator_config {
+ const char *supply_name;
+ const char *input_supply;
+ unsigned int enabled_at_boot: 1;
+ unsigned int startup_delay;
+ enum gpiod_flags *gflags;
+ int ngpios;
+ struct gpio_regulator_state *states;
+ int nr_states;
+ enum regulator_type type;
+ struct regulator_init_data *init_data;
+};
+
+struct gpio_regulator_data {
+ struct regulator_desc desc;
+ struct gpio_desc **gpiods;
+ int nr_gpios;
+ struct gpio_regulator_state *states;
+ int nr_states;
+ int state;
+};
+
+struct auxiliary_device_id {
+ char name[32];
+ kernel_ulong_t driver_data;
+};
+
+struct auxiliary_device {
+ struct device dev;
+ const char *name;
+ u32 id;
+ struct {
+ struct xarray irqs;
+ struct mutex lock;
+ bool irq_dir_exists;
+ } sysfs;
+};
+
+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 jh71x0_reset_adev {
+ void *base;
+ struct auxiliary_device adev;
+};
+
+struct jh7110_reset_info {
+ unsigned int nr_resets;
+ unsigned int assert_offset;
+ unsigned int status_offset;
+};
+
+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 {
+ short unsigned int c_iflag;
+ short unsigned int c_oflag;
+ short unsigned int c_cflag;
+ short unsigned int c_lflag;
+ unsigned char c_line;
+ unsigned char c_cc[8];
+};
+
+enum tty_flow_change {
+ TTY_FLOW_NO_CHANGE = 0,
+ TTY_THROTTLE_SAFE = 1,
+ TTY_UNTHROTTLE_SAFE = 2,
+};
+
+struct kbdiacruc {
+ unsigned int diacr;
+ unsigned int base;
+ unsigned int result;
+};
+
+struct unipair {
+ short unsigned int unicode;
+ short unsigned int fontpos;
+};
+
+enum translation_map {
+ LAT1_MAP = 0,
+ GRAF_MAP = 1,
+ IBMPC_MAP = 2,
+ USER_MAP = 3,
+ FIRST_MAP = 0,
+ LAST_MAP = 3,
+};
+
+struct uni_pagedict {
+ u16 **uni_pgdir[32];
+ long unsigned int refcount;
+ long unsigned int sum;
+ unsigned char *inverse_translations[4];
+ u16 *inverse_trans_unicode;
+};
+
+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 clk_notifier_data {
+ struct clk *clk;
+ long unsigned int old_rate;
+ long unsigned int new_rate;
+};
+
+struct of_serial_info {
+ struct clk *clk;
+ struct reset_control *rst;
+ int type;
+ int line;
+ struct notifier_block clk_notifier;
+};
+
+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 device_attach_data {
+ struct device *dev;
+ bool check_async;
+ bool want_async;
+ bool have_async;
+};
+
+struct container_dev {
+ struct device dev;
+ int (*offline)(struct container_dev *);
+};
+
+struct builtin_fw {
+ char *name;
+ void *data;
+ long unsigned int size;
+};
+
+struct regmap_async_spi {
+ struct regmap_async core;
+ struct spi_message m;
+ struct spi_transfer t[2];
+};
+
+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 axp20x_variants {
+ AXP152_ID = 0,
+ AXP192_ID = 1,
+ AXP202_ID = 2,
+ AXP209_ID = 3,
+ AXP221_ID = 4,
+ AXP223_ID = 5,
+ AXP288_ID = 6,
+ AXP313A_ID = 7,
+ AXP717_ID = 8,
+ AXP803_ID = 9,
+ AXP806_ID = 10,
+ AXP809_ID = 11,
+ AXP813_ID = 12,
+ AXP15060_ID = 13,
+ NR_AXP20X_VARIANTS = 14,
+};
+
+enum {
+ AXP152_IRQ_LDO0IN_CONNECT = 1,
+ AXP152_IRQ_LDO0IN_REMOVAL = 2,
+ AXP152_IRQ_ALDO0IN_CONNECT = 3,
+ AXP152_IRQ_ALDO0IN_REMOVAL = 4,
+ AXP152_IRQ_DCDC1_V_LOW = 5,
+ AXP152_IRQ_DCDC2_V_LOW = 6,
+ AXP152_IRQ_DCDC3_V_LOW = 7,
+ AXP152_IRQ_DCDC4_V_LOW = 8,
+ AXP152_IRQ_PEK_SHORT = 9,
+ AXP152_IRQ_PEK_LONG = 10,
+ AXP152_IRQ_TIMER = 11,
+ AXP152_IRQ_PEK_FAL_EDGE = 12,
+ AXP152_IRQ_PEK_RIS_EDGE = 13,
+ AXP152_IRQ_GPIO3_INPUT = 14,
+ AXP152_IRQ_GPIO2_INPUT = 15,
+ AXP152_IRQ_GPIO1_INPUT = 16,
+ AXP152_IRQ_GPIO0_INPUT = 17,
+};
+
+enum axp192_irqs {
+ AXP192_IRQ_ACIN_OVER_V = 1,
+ AXP192_IRQ_ACIN_PLUGIN = 2,
+ AXP192_IRQ_ACIN_REMOVAL = 3,
+ AXP192_IRQ_VBUS_OVER_V = 4,
+ AXP192_IRQ_VBUS_PLUGIN = 5,
+ AXP192_IRQ_VBUS_REMOVAL = 6,
+ AXP192_IRQ_VBUS_V_LOW = 7,
+ AXP192_IRQ_BATT_PLUGIN = 8,
+ AXP192_IRQ_BATT_REMOVAL = 9,
+ AXP192_IRQ_BATT_ENT_ACT_MODE = 10,
+ AXP192_IRQ_BATT_EXIT_ACT_MODE = 11,
+ AXP192_IRQ_CHARG = 12,
+ AXP192_IRQ_CHARG_DONE = 13,
+ AXP192_IRQ_BATT_TEMP_HIGH = 14,
+ AXP192_IRQ_BATT_TEMP_LOW = 15,
+ AXP192_IRQ_DIE_TEMP_HIGH = 16,
+ AXP192_IRQ_CHARG_I_LOW = 17,
+ AXP192_IRQ_DCDC1_V_LONG = 18,
+ AXP192_IRQ_DCDC2_V_LONG = 19,
+ AXP192_IRQ_DCDC3_V_LONG = 20,
+ AXP192_IRQ_PEK_SHORT = 22,
+ AXP192_IRQ_PEK_LONG = 23,
+ AXP192_IRQ_N_OE_PWR_ON = 24,
+ AXP192_IRQ_N_OE_PWR_OFF = 25,
+ AXP192_IRQ_VBUS_VALID = 26,
+ AXP192_IRQ_VBUS_NOT_VALID = 27,
+ AXP192_IRQ_VBUS_SESS_VALID = 28,
+ AXP192_IRQ_VBUS_SESS_END = 29,
+ AXP192_IRQ_LOW_PWR_LVL = 31,
+ AXP192_IRQ_TIMER = 32,
+ AXP192_IRQ_GPIO2_INPUT = 37,
+ AXP192_IRQ_GPIO1_INPUT = 38,
+ AXP192_IRQ_GPIO0_INPUT = 39,
+};
+
+enum {
+ AXP20X_IRQ_ACIN_OVER_V = 1,
+ AXP20X_IRQ_ACIN_PLUGIN = 2,
+ AXP20X_IRQ_ACIN_REMOVAL = 3,
+ AXP20X_IRQ_VBUS_OVER_V = 4,
+ AXP20X_IRQ_VBUS_PLUGIN = 5,
+ AXP20X_IRQ_VBUS_REMOVAL = 6,
+ AXP20X_IRQ_VBUS_V_LOW = 7,
+ AXP20X_IRQ_BATT_PLUGIN = 8,
+ AXP20X_IRQ_BATT_REMOVAL = 9,
+ AXP20X_IRQ_BATT_ENT_ACT_MODE = 10,
+ AXP20X_IRQ_BATT_EXIT_ACT_MODE = 11,
+ AXP20X_IRQ_CHARG = 12,
+ AXP20X_IRQ_CHARG_DONE = 13,
+ AXP20X_IRQ_BATT_TEMP_HIGH = 14,
+ AXP20X_IRQ_BATT_TEMP_LOW = 15,
+ AXP20X_IRQ_DIE_TEMP_HIGH = 16,
+ AXP20X_IRQ_CHARG_I_LOW = 17,
+ AXP20X_IRQ_DCDC1_V_LONG = 18,
+ AXP20X_IRQ_DCDC2_V_LONG = 19,
+ AXP20X_IRQ_DCDC3_V_LONG = 20,
+ AXP20X_IRQ_PEK_SHORT = 22,
+ AXP20X_IRQ_PEK_LONG = 23,
+ AXP20X_IRQ_N_OE_PWR_ON = 24,
+ AXP20X_IRQ_N_OE_PWR_OFF = 25,
+ AXP20X_IRQ_VBUS_VALID = 26,
+ AXP20X_IRQ_VBUS_NOT_VALID = 27,
+ AXP20X_IRQ_VBUS_SESS_VALID = 28,
+ AXP20X_IRQ_VBUS_SESS_END = 29,
+ AXP20X_IRQ_LOW_PWR_LVL1 = 30,
+ AXP20X_IRQ_LOW_PWR_LVL2 = 31,
+ AXP20X_IRQ_TIMER = 32,
+ AXP20X_IRQ_PEK_FAL_EDGE = 33,
+ AXP20X_IRQ_PEK_RIS_EDGE = 34,
+ AXP20X_IRQ_GPIO3_INPUT = 35,
+ AXP20X_IRQ_GPIO2_INPUT = 36,
+ AXP20X_IRQ_GPIO1_INPUT = 37,
+ AXP20X_IRQ_GPIO0_INPUT = 38,
+};
+
+enum axp22x_irqs {
+ AXP22X_IRQ_ACIN_OVER_V = 1,
+ AXP22X_IRQ_ACIN_PLUGIN = 2,
+ AXP22X_IRQ_ACIN_REMOVAL = 3,
+ AXP22X_IRQ_VBUS_OVER_V = 4,
+ AXP22X_IRQ_VBUS_PLUGIN = 5,
+ AXP22X_IRQ_VBUS_REMOVAL = 6,
+ AXP22X_IRQ_VBUS_V_LOW = 7,
+ AXP22X_IRQ_BATT_PLUGIN = 8,
+ AXP22X_IRQ_BATT_REMOVAL = 9,
+ AXP22X_IRQ_BATT_ENT_ACT_MODE = 10,
+ AXP22X_IRQ_BATT_EXIT_ACT_MODE = 11,
+ AXP22X_IRQ_CHARG = 12,
+ AXP22X_IRQ_CHARG_DONE = 13,
+ AXP22X_IRQ_BATT_TEMP_HIGH = 14,
+ AXP22X_IRQ_BATT_TEMP_LOW = 15,
+ AXP22X_IRQ_DIE_TEMP_HIGH = 16,
+ AXP22X_IRQ_PEK_SHORT = 17,
+ AXP22X_IRQ_PEK_LONG = 18,
+ AXP22X_IRQ_LOW_PWR_LVL1 = 19,
+ AXP22X_IRQ_LOW_PWR_LVL2 = 20,
+ AXP22X_IRQ_TIMER = 21,
+ AXP22X_IRQ_PEK_FAL_EDGE = 22,
+ AXP22X_IRQ_PEK_RIS_EDGE = 23,
+ AXP22X_IRQ_GPIO1_INPUT = 24,
+ AXP22X_IRQ_GPIO0_INPUT = 25,
+};
+
+enum axp288_irqs {
+ AXP288_IRQ_VBUS_FALL = 2,
+ AXP288_IRQ_VBUS_RISE = 3,
+ AXP288_IRQ_OV = 4,
+ AXP288_IRQ_FALLING_ALT = 5,
+ AXP288_IRQ_RISING_ALT = 6,
+ AXP288_IRQ_OV_ALT = 7,
+ AXP288_IRQ_DONE = 10,
+ AXP288_IRQ_CHARGING = 11,
+ AXP288_IRQ_SAFE_QUIT = 12,
+ AXP288_IRQ_SAFE_ENTER = 13,
+ AXP288_IRQ_ABSENT = 14,
+ AXP288_IRQ_APPEND = 15,
+ AXP288_IRQ_QWBTU = 16,
+ AXP288_IRQ_WBTU = 17,
+ AXP288_IRQ_QWBTO = 18,
+ AXP288_IRQ_WBTO = 19,
+ AXP288_IRQ_QCBTU = 20,
+ AXP288_IRQ_CBTU = 21,
+ AXP288_IRQ_QCBTO = 22,
+ AXP288_IRQ_CBTO = 23,
+ AXP288_IRQ_WL2 = 24,
+ AXP288_IRQ_WL1 = 25,
+ AXP288_IRQ_GPADC = 26,
+ AXP288_IRQ_OT = 31,
+ AXP288_IRQ_GPIO0 = 32,
+ AXP288_IRQ_GPIO1 = 33,
+ AXP288_IRQ_POKO = 34,
+ AXP288_IRQ_POKL = 35,
+ AXP288_IRQ_POKS = 36,
+ AXP288_IRQ_POKN = 37,
+ AXP288_IRQ_POKP = 38,
+ AXP288_IRQ_TIMER = 39,
+ AXP288_IRQ_MV_CHNG = 40,
+ AXP288_IRQ_BC_USB_CHNG = 41,
+};
+
+enum axp313a_irqs {
+ AXP313A_IRQ_DIE_TEMP_HIGH = 0,
+ AXP313A_IRQ_DCDC2_V_LOW = 2,
+ AXP313A_IRQ_DCDC3_V_LOW = 3,
+ AXP313A_IRQ_PEK_LONG = 4,
+ AXP313A_IRQ_PEK_SHORT = 5,
+ AXP313A_IRQ_PEK_FAL_EDGE = 6,
+ AXP313A_IRQ_PEK_RIS_EDGE = 7,
+};
+
+enum axp717_irqs {
+ AXP717_IRQ_VBUS_FAULT = 0,
+ AXP717_IRQ_VBUS_OVER_V = 1,
+ AXP717_IRQ_BOOST_OVER_V = 2,
+ AXP717_IRQ_GAUGE_NEW_SOC = 4,
+ AXP717_IRQ_SOC_DROP_LVL1 = 6,
+ AXP717_IRQ_SOC_DROP_LVL2 = 7,
+ AXP717_IRQ_PEK_RIS_EDGE = 8,
+ AXP717_IRQ_PEK_FAL_EDGE = 9,
+ AXP717_IRQ_PEK_LONG = 10,
+ AXP717_IRQ_PEK_SHORT = 11,
+ AXP717_IRQ_BATT_REMOVAL = 12,
+ AXP717_IRQ_BATT_PLUGIN = 13,
+ AXP717_IRQ_VBUS_REMOVAL = 14,
+ AXP717_IRQ_VBUS_PLUGIN = 15,
+ AXP717_IRQ_BATT_OVER_V = 16,
+ AXP717_IRQ_CHARG_TIMER = 17,
+ AXP717_IRQ_DIE_TEMP_HIGH = 18,
+ AXP717_IRQ_CHARG = 19,
+ AXP717_IRQ_CHARG_DONE = 20,
+ AXP717_IRQ_BATT_OVER_CURR = 21,
+ AXP717_IRQ_LDO_OVER_CURR = 22,
+ AXP717_IRQ_WDOG_EXPIRE = 23,
+ AXP717_IRQ_BATT_ACT_TEMP_LOW = 24,
+ AXP717_IRQ_BATT_ACT_TEMP_HIGH = 25,
+ AXP717_IRQ_BATT_CHG_TEMP_LOW = 26,
+ AXP717_IRQ_BATT_CHG_TEMP_HIGH = 27,
+ AXP717_IRQ_BATT_QUIT_TEMP_HIGH = 28,
+ AXP717_IRQ_BC_USB_CHNG = 30,
+ AXP717_IRQ_BC_USB_DONE = 31,
+ AXP717_IRQ_TYPEC_PLUGIN = 37,
+ AXP717_IRQ_TYPEC_REMOVE = 38,
+};
+
+enum axp803_irqs {
+ AXP803_IRQ_ACIN_OVER_V = 1,
+ AXP803_IRQ_ACIN_PLUGIN = 2,
+ AXP803_IRQ_ACIN_REMOVAL = 3,
+ AXP803_IRQ_VBUS_OVER_V = 4,
+ AXP803_IRQ_VBUS_PLUGIN = 5,
+ AXP803_IRQ_VBUS_REMOVAL = 6,
+ AXP803_IRQ_BATT_PLUGIN = 7,
+ AXP803_IRQ_BATT_REMOVAL = 8,
+ AXP803_IRQ_BATT_ENT_ACT_MODE = 9,
+ AXP803_IRQ_BATT_EXIT_ACT_MODE = 10,
+ AXP803_IRQ_CHARG = 11,
+ AXP803_IRQ_CHARG_DONE = 12,
+ AXP803_IRQ_BATT_CHG_TEMP_HIGH = 13,
+ AXP803_IRQ_BATT_CHG_TEMP_HIGH_END = 14,
+ AXP803_IRQ_BATT_CHG_TEMP_LOW = 15,
+ AXP803_IRQ_BATT_CHG_TEMP_LOW_END = 16,
+ AXP803_IRQ_BATT_ACT_TEMP_HIGH = 17,
+ AXP803_IRQ_BATT_ACT_TEMP_HIGH_END = 18,
+ AXP803_IRQ_BATT_ACT_TEMP_LOW = 19,
+ AXP803_IRQ_BATT_ACT_TEMP_LOW_END = 20,
+ AXP803_IRQ_DIE_TEMP_HIGH = 21,
+ AXP803_IRQ_GPADC = 22,
+ AXP803_IRQ_LOW_PWR_LVL1 = 23,
+ AXP803_IRQ_LOW_PWR_LVL2 = 24,
+ AXP803_IRQ_TIMER = 25,
+ AXP803_IRQ_PEK_FAL_EDGE = 26,
+ AXP803_IRQ_PEK_RIS_EDGE = 27,
+ AXP803_IRQ_PEK_SHORT = 28,
+ AXP803_IRQ_PEK_LONG = 29,
+ AXP803_IRQ_PEK_OVER_OFF = 30,
+ AXP803_IRQ_GPIO1_INPUT = 31,
+ AXP803_IRQ_GPIO0_INPUT = 32,
+ AXP803_IRQ_BC_USB_CHNG = 33,
+ AXP803_IRQ_MV_CHNG = 34,
+};
+
+enum axp806_irqs {
+ AXP806_IRQ_DIE_TEMP_HIGH_LV1 = 0,
+ AXP806_IRQ_DIE_TEMP_HIGH_LV2 = 1,
+ AXP806_IRQ_DCDCA_V_LOW = 2,
+ AXP806_IRQ_DCDCB_V_LOW = 3,
+ AXP806_IRQ_DCDCC_V_LOW = 4,
+ AXP806_IRQ_DCDCD_V_LOW = 5,
+ AXP806_IRQ_DCDCE_V_LOW = 6,
+ AXP806_IRQ_POK_LONG = 7,
+ AXP806_IRQ_POK_SHORT = 8,
+ AXP806_IRQ_WAKEUP = 9,
+ AXP806_IRQ_POK_FALL = 10,
+ AXP806_IRQ_POK_RISE = 11,
+};
+
+enum axp809_irqs {
+ AXP809_IRQ_ACIN_OVER_V = 1,
+ AXP809_IRQ_ACIN_PLUGIN = 2,
+ AXP809_IRQ_ACIN_REMOVAL = 3,
+ AXP809_IRQ_VBUS_OVER_V = 4,
+ AXP809_IRQ_VBUS_PLUGIN = 5,
+ AXP809_IRQ_VBUS_REMOVAL = 6,
+ AXP809_IRQ_VBUS_V_LOW = 7,
+ AXP809_IRQ_BATT_PLUGIN = 8,
+ AXP809_IRQ_BATT_REMOVAL = 9,
+ AXP809_IRQ_BATT_ENT_ACT_MODE = 10,
+ AXP809_IRQ_BATT_EXIT_ACT_MODE = 11,
+ AXP809_IRQ_CHARG = 12,
+ AXP809_IRQ_CHARG_DONE = 13,
+ AXP809_IRQ_BATT_CHG_TEMP_HIGH = 14,
+ AXP809_IRQ_BATT_CHG_TEMP_HIGH_END = 15,
+ AXP809_IRQ_BATT_CHG_TEMP_LOW = 16,
+ AXP809_IRQ_BATT_CHG_TEMP_LOW_END = 17,
+ AXP809_IRQ_BATT_ACT_TEMP_HIGH = 18,
+ AXP809_IRQ_BATT_ACT_TEMP_HIGH_END = 19,
+ AXP809_IRQ_BATT_ACT_TEMP_LOW = 20,
+ AXP809_IRQ_BATT_ACT_TEMP_LOW_END = 21,
+ AXP809_IRQ_DIE_TEMP_HIGH = 22,
+ AXP809_IRQ_LOW_PWR_LVL1 = 23,
+ AXP809_IRQ_LOW_PWR_LVL2 = 24,
+ AXP809_IRQ_TIMER = 25,
+ AXP809_IRQ_PEK_FAL_EDGE = 26,
+ AXP809_IRQ_PEK_RIS_EDGE = 27,
+ AXP809_IRQ_PEK_SHORT = 28,
+ AXP809_IRQ_PEK_LONG = 29,
+ AXP809_IRQ_PEK_OVER_OFF = 30,
+ AXP809_IRQ_GPIO1_INPUT = 31,
+ AXP809_IRQ_GPIO0_INPUT = 32,
+};
+
+enum axp15060_irqs {
+ AXP15060_IRQ_DIE_TEMP_HIGH_LV1 = 1,
+ AXP15060_IRQ_DIE_TEMP_HIGH_LV2 = 2,
+ AXP15060_IRQ_DCDC1_V_LOW = 3,
+ AXP15060_IRQ_DCDC2_V_LOW = 4,
+ AXP15060_IRQ_DCDC3_V_LOW = 5,
+ AXP15060_IRQ_DCDC4_V_LOW = 6,
+ AXP15060_IRQ_DCDC5_V_LOW = 7,
+ AXP15060_IRQ_DCDC6_V_LOW = 8,
+ AXP15060_IRQ_PEK_LONG = 9,
+ AXP15060_IRQ_PEK_SHORT = 10,
+ AXP15060_IRQ_GPIO1_INPUT = 11,
+ AXP15060_IRQ_PEK_FAL_EDGE = 12,
+ AXP15060_IRQ_PEK_RIS_EDGE = 13,
+ AXP15060_IRQ_GPIO2_INPUT = 14,
+};
+
+struct axp20x_dev {
+ struct device *dev;
+ int irq;
+ long unsigned int irq_flags;
+ struct regmap *regmap;
+ struct regmap_irq_chip_data *regmap_irqc;
+ long int variant;
+ int nr_cells;
+ const struct mfd_cell *cells;
+ const struct regmap_config *regmap_cfg;
+ const struct regmap_irq_chip *regmap_irq_chip;
+};
+
+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 long long unsigned int adr;
+};
+
+struct badrange {
+ struct list_head list;
+ spinlock_t lock;
+};
+
+struct nvdimm_bus_descriptor;
+
+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;
+ long unsigned int cmd_mask;
+ long unsigned int dimm_family_mask;
+ long unsigned int 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;
+};
+
+enum nvdimm_fwa_capability {
+ NVDIMM_FWA_CAP_INVALID = 0,
+ NVDIMM_FWA_CAP_NONE = 1,
+ NVDIMM_FWA_CAP_QUIESCE = 2,
+ NVDIMM_FWA_CAP_LIVE = 3,
+};
+
+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_namespace_io {
+ struct nd_namespace_common common;
+ struct resource res;
+ resource_size_t size;
+ void *addr;
+ struct badblocks bb;
+};
+
+enum {
+ ND_MAX_LANES = 256,
+ INT_LBASIZE_ALIGNMENT = 64,
+ NVDIMM_IO_ATOMIC = 1,
+};
+
+enum nd_pfn_mode {
+ PFN_MODE_NONE = 0,
+ PFN_MODE_RAM = 1,
+ PFN_MODE_PMEM = 2,
+};
+
+struct nd_pfn_sb;
+
+struct nd_pfn {
+ int id;
+ uuid_t *uuid;
+ struct device dev;
+ long unsigned int align;
+ long unsigned int 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 nd_async_mode {
+ ND_SYNC = 0,
+ ND_ASYNC = 1,
+};
+
+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;
+};
+
+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 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_fence_array_cb callbacks[0];
+};
+
+struct dma_fence_chain {
+ struct dma_fence base;
+ struct dma_fence *prev;
+ u64 prev_seqno;
+ struct dma_fence *fence;
+ union {
+ struct dma_fence_cb cb;
+ struct irq_work work;
+ };
+ spinlock_t lock;
+};
+
+enum scsi_vpd_parameters {
+ SCSI_VPD_HEADER_SIZE = 4,
+ SCSI_VPD_LIST_SIZE = 36,
+};
+
+struct scsi_lun {
+ __u8 scsi_lun[8];
+};
+
+enum scsi_timeouts {
+ SCSI_DEFAULT_EH_TIMEOUT = 2500,
+};
+
+enum scsi_scan_mode {
+ SCSI_SCAN_INITIAL = 0,
+ SCSI_SCAN_RESCAN = 1,
+ SCSI_SCAN_MANUAL = 2,
+};
+
+struct async_scan_data {
+ struct list_head list;
+ struct Scsi_Host *shost;
+ struct completion prev_finished;
+};
+
+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,
+};
+
+struct cdrom_ti {
+ __u8 cdti_trk0;
+ __u8 cdti_ind0;
+ __u8 cdti_trk1;
+ __u8 cdti_ind1;
+};
+
+struct cdrom_tochdr {
+ __u8 cdth_trk0;
+ __u8 cdth_trk1;
+};
+
+struct cdrom_tocentry {
+ __u8 cdte_track;
+ __u8 cdte_adr: 4;
+ __u8 cdte_ctrl: 4;
+ __u8 cdte_format;
+ union cdrom_addr cdte_addr;
+ __u8 cdte_datamode;
+};
+
+struct media_event_desc {
+ __u8 media_event_code: 4;
+ __u8 reserved1: 4;
+ __u8 door_open: 1;
+ __u8 media_present: 1;
+ __u8 reserved2: 6;
+ __u8 start_slot;
+ __u8 end_slot;
+};
+
+struct scsi_cd {
+ unsigned int capacity;
+ struct scsi_device *device;
+ unsigned int vendor;
+ long unsigned int ms_offset;
+ unsigned int writeable: 1;
+ unsigned int use: 1;
+ unsigned int xa_flag: 1;
+ unsigned int readcd_known: 1;
+ unsigned int readcd_cdda: 1;
+ unsigned int media_present: 1;
+ int tur_mismatch;
+ bool tur_changed: 1;
+ bool get_event_changed: 1;
+ bool ignore_get_event: 1;
+ struct cdrom_device_info cdi;
+ struct mutex lock;
+ struct gendisk *disk;
+};
+
+typedef struct scsi_cd Scsi_CD;
+
+enum hsm_task_states {
+ HSM_ST_IDLE = 0,
+ HSM_ST_FIRST = 1,
+ HSM_ST = 2,
+ HSM_ST_LAST = 3,
+ HSM_ST_ERR = 4,
+};
+
+struct mtd_partition {
+ const char *name;
+ const char * const *types;
+ uint64_t size;
+ uint64_t offset;
+ uint32_t mask_flags;
+ uint32_t add_flags;
+ struct device_node *of_node;
+};
+
+struct mtd_part_parser_data {
+ long unsigned int origin;
+};
+
+struct mtd_part_parser {
+ struct list_head list;
+ struct module *owner;
+ const char *name;
+ const struct of_device_id *of_match_table;
+ int (*parse_fn)(struct mtd_info *, const struct mtd_partition **, struct mtd_part_parser_data *);
+ void (*cleanup)(const struct mtd_partition *, int);
+};
+
+struct mtd_partitions {
+ const struct mtd_partition *parts;
+ int nr_parts;
+ const struct mtd_part_parser *parser;
+};
+
+struct of_dev_auxdata {
+ char *compatible;
+ resource_size_t phys_addr;
+ char *name;
+ void *platform_data;
+};
+
+struct spi_mem_driver {
+ struct spi_driver spidrv;
+ int (*probe)(struct spi_mem *);
+ int (*remove)(struct spi_mem *);
+ void (*shutdown)(struct spi_mem *);
+};
+
+struct flash_platform_data {
+ char *name;
+ struct mtd_partition *parts;
+ unsigned int nr_parts;
+ char *type;
+};
+
+struct spi_nor_erase_command {
+ struct list_head list;
+ u32 count;
+ u32 size;
+ u8 opcode;
+};
+
+enum phy_state_work {
+ PHY_STATE_WORK_NONE = 0,
+ PHY_STATE_WORK_ANEG = 1,
+ PHY_STATE_WORK_SUSPEND = 2,
+};
+
+struct mdio_driver {
+ struct mdio_driver_common mdiodrv;
+ int (*probe)(struct mdio_device *);
+ void (*remove)(struct mdio_device *);
+ void (*shutdown)(struct mdio_device *);
+};
+
+struct yt8521_priv {
+ long unsigned int combo_advertising[2];
+ u8 polling_mode;
+ u8 strap_mode;
+ u8 reg_page;
+};
+
+struct ytphy_cfg_reg_map {
+ u32 cfg;
+ u32 reg;
+};
+
+struct ytphy_ldo_vol_map {
+ u32 vol;
+ u32 ds;
+ u32 cur;
+};
+
+enum netdev_queue_state_t {
+ __QUEUE_STATE_DRV_XOFF = 0,
+ __QUEUE_STATE_STACK_XOFF = 1,
+ __QUEUE_STATE_FROZEN = 2,
+};
+
+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,
+};
+
+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));
+
+enum pm_api_id {
+ PM_API_FEATURES = 0,
+ PM_GET_API_VERSION = 1,
+ PM_REGISTER_NOTIFIER = 5,
+ PM_FORCE_POWERDOWN = 8,
+ PM_REQUEST_WAKEUP = 10,
+ PM_SYSTEM_SHUTDOWN = 12,
+ PM_REQUEST_NODE = 13,
+ PM_RELEASE_NODE = 14,
+ PM_SET_REQUIREMENT = 15,
+ PM_RESET_ASSERT = 17,
+ PM_RESET_GET_STATUS = 18,
+ PM_MMIO_WRITE = 19,
+ PM_MMIO_READ = 20,
+ PM_PM_INIT_FINALIZE = 21,
+ PM_FPGA_LOAD = 22,
+ PM_FPGA_GET_STATUS = 23,
+ PM_GET_CHIPID = 24,
+ PM_SECURE_SHA = 26,
+ PM_PINCTRL_REQUEST = 28,
+ PM_PINCTRL_RELEASE = 29,
+ PM_PINCTRL_SET_FUNCTION = 31,
+ PM_PINCTRL_CONFIG_PARAM_GET = 32,
+ PM_PINCTRL_CONFIG_PARAM_SET = 33,
+ PM_IOCTL = 34,
+ PM_QUERY_DATA = 35,
+ PM_CLOCK_ENABLE = 36,
+ PM_CLOCK_DISABLE = 37,
+ PM_CLOCK_GETSTATE = 38,
+ PM_CLOCK_SETDIVIDER = 39,
+ PM_CLOCK_GETDIVIDER = 40,
+ PM_CLOCK_SETPARENT = 43,
+ PM_CLOCK_GETPARENT = 44,
+ PM_FPGA_READ = 46,
+ PM_SECURE_AES = 47,
+ PM_EFUSE_ACCESS = 53,
+ PM_FEATURE_CHECK = 63,
+};
+
+enum pm_ioctl_id {
+ IOCTL_GET_RPU_OPER_MODE = 0,
+ IOCTL_SET_RPU_OPER_MODE = 1,
+ IOCTL_RPU_BOOT_ADDR_CONFIG = 2,
+ IOCTL_TCM_COMB_CONFIG = 3,
+ IOCTL_SET_TAPDELAY_BYPASS = 4,
+ IOCTL_SD_DLL_RESET = 6,
+ IOCTL_SET_SD_TAPDELAY = 7,
+ IOCTL_SET_PLL_FRAC_MODE = 8,
+ IOCTL_GET_PLL_FRAC_MODE = 9,
+ IOCTL_SET_PLL_FRAC_DATA = 10,
+ IOCTL_GET_PLL_FRAC_DATA = 11,
+ IOCTL_WRITE_GGS = 12,
+ IOCTL_READ_GGS = 13,
+ IOCTL_WRITE_PGGS = 14,
+ IOCTL_READ_PGGS = 15,
+ IOCTL_SET_BOOT_HEALTH_STATUS = 17,
+ IOCTL_OSPI_MUX_SELECT = 21,
+ IOCTL_REGISTER_SGI = 25,
+ IOCTL_SET_FEATURE_CONFIG = 26,
+ IOCTL_GET_FEATURE_CONFIG = 27,
+ IOCTL_SET_SD_CONFIG = 30,
+ IOCTL_SET_GEM_CONFIG = 31,
+};
+
+enum pm_gem_config_type {
+ GEM_CONFIG_SGMII_MODE = 1,
+ GEM_CONFIG_FIXED = 2,
+};
+
+struct macb_dma_desc {
+ u32 addr;
+ u32 ctrl;
+};
+
+struct macb_dma_desc_64 {
+ u32 addrh;
+ u32 resvd;
+};
+
+struct macb_tx_skb {
+ struct sk_buff *skb;
+ dma_addr_t mapping;
+ size_t size;
+ bool mapped_as_page;
+};
+
+struct macb_stats {
+ u32 rx_pause_frames;
+ u32 tx_ok;
+ u32 tx_single_cols;
+ u32 tx_multiple_cols;
+ u32 rx_ok;
+ u32 rx_fcs_errors;
+ u32 rx_align_errors;
+ u32 tx_deferred;
+ u32 tx_late_cols;
+ u32 tx_excessive_cols;
+ u32 tx_underruns;
+ u32 tx_carrier_errors;
+ u32 rx_resource_errors;
+ u32 rx_overruns;
+ u32 rx_symbol_errors;
+ u32 rx_oversize_pkts;
+ u32 rx_jabbers;
+ u32 rx_undersize_pkts;
+ u32 sqe_test_errors;
+ u32 rx_length_mismatch;
+ u32 tx_pause_frames;
+};
+
+struct gem_stats {
+ u32 tx_octets_31_0;
+ u32 tx_octets_47_32;
+ u32 tx_frames;
+ u32 tx_broadcast_frames;
+ u32 tx_multicast_frames;
+ u32 tx_pause_frames;
+ u32 tx_64_byte_frames;
+ u32 tx_65_127_byte_frames;
+ u32 tx_128_255_byte_frames;
+ u32 tx_256_511_byte_frames;
+ u32 tx_512_1023_byte_frames;
+ u32 tx_1024_1518_byte_frames;
+ u32 tx_greater_than_1518_byte_frames;
+ u32 tx_underrun;
+ u32 tx_single_collision_frames;
+ u32 tx_multiple_collision_frames;
+ u32 tx_excessive_collisions;
+ u32 tx_late_collisions;
+ u32 tx_deferred_frames;
+ u32 tx_carrier_sense_errors;
+ u32 rx_octets_31_0;
+ u32 rx_octets_47_32;
+ u32 rx_frames;
+ u32 rx_broadcast_frames;
+ u32 rx_multicast_frames;
+ u32 rx_pause_frames;
+ u32 rx_64_byte_frames;
+ u32 rx_65_127_byte_frames;
+ u32 rx_128_255_byte_frames;
+ u32 rx_256_511_byte_frames;
+ u32 rx_512_1023_byte_frames;
+ u32 rx_1024_1518_byte_frames;
+ u32 rx_greater_than_1518_byte_frames;
+ u32 rx_undersized_frames;
+ u32 rx_oversize_frames;
+ u32 rx_jabbers;
+ u32 rx_frame_check_sequence_errors;
+ u32 rx_length_field_frame_errors;
+ u32 rx_symbol_errors;
+ u32 rx_alignment_errors;
+ u32 rx_resource_errors;
+ u32 rx_overruns;
+ u32 rx_ip_header_checksum_errors;
+ u32 rx_tcp_checksum_errors;
+ u32 rx_udp_checksum_errors;
+};
+
+struct gem_statistic {
+ char stat_string[32];
+ int offset;
+ u32 stat_bits;
+};
+
+struct queue_stats {
+ union {
+ long unsigned int first;
+ long unsigned int rx_packets;
+ };
+ long unsigned int rx_bytes;
+ long unsigned int rx_dropped;
+ long unsigned int tx_packets;
+ long unsigned int tx_bytes;
+ long unsigned int tx_dropped;
+};
+
+struct macb;
+
+struct macb_queue;
+
+struct macb_or_gem_ops {
+ int (*mog_alloc_rx_buffers)(struct macb *);
+ void (*mog_free_rx_buffers)(struct macb *);
+ void (*mog_init_rings)(struct macb *);
+ int (*mog_rx)(struct macb_queue *, struct napi_struct *, int);
+};
+
+struct macb_queue {
+ struct macb *bp;
+ int irq;
+ unsigned int ISR;
+ unsigned int IER;
+ unsigned int IDR;
+ unsigned int IMR;
+ unsigned int TBQP;
+ unsigned int TBQPH;
+ unsigned int RBQS;
+ unsigned int RBQP;
+ unsigned int RBQPH;
+ spinlock_t tx_ptr_lock;
+ unsigned int tx_head;
+ unsigned int tx_tail;
+ struct macb_dma_desc *tx_ring;
+ struct macb_tx_skb *tx_skb;
+ dma_addr_t tx_ring_dma;
+ struct work_struct tx_error_task;
+ bool txubr_pending;
+ struct napi_struct napi_tx;
+ dma_addr_t rx_ring_dma;
+ dma_addr_t rx_buffers_dma;
+ unsigned int rx_tail;
+ unsigned int rx_prepared_head;
+ struct macb_dma_desc *rx_ring;
+ struct sk_buff **rx_skbuff;
+ void *rx_buffers;
+ struct napi_struct napi_rx;
+ struct queue_stats stats;
+};
+
+struct tsu_incr {
+ u32 sub_ns;
+ u32 ns;
+};
+
+struct ethtool_rx_fs_list {
+ struct list_head list;
+ unsigned int count;
+};
+
+struct macb_pm_data {
+ u32 scrt2;
+ u32 usrio;
+};
+
+struct macb_ptp_info;
+
+struct macb_usrio_config;
+
+struct macb {
+ void *regs;
+ bool native_io;
+ u32 (*macb_reg_readl)(struct macb *, int);
+ void (*macb_reg_writel)(struct macb *, int, u32);
+ struct macb_dma_desc *rx_ring_tieoff;
+ dma_addr_t rx_ring_tieoff_dma;
+ size_t rx_buffer_size;
+ unsigned int rx_ring_size;
+ unsigned int tx_ring_size;
+ unsigned int num_queues;
+ unsigned int queue_mask;
+ struct macb_queue queues[8];
+ spinlock_t lock;
+ struct platform_device *pdev;
+ struct clk *pclk;
+ struct clk *hclk;
+ struct clk *tx_clk;
+ struct clk *rx_clk;
+ struct clk *tsu_clk;
+ struct net_device *dev;
+ union {
+ struct macb_stats macb;
+ struct gem_stats gem;
+ } hw_stats;
+ struct macb_or_gem_ops macbgem_ops;
+ struct mii_bus *mii_bus;
+ struct phylink *phylink;
+ struct phylink_config phylink_config;
+ struct phylink_pcs phylink_usx_pcs;
+ struct phylink_pcs phylink_sgmii_pcs;
+ u32 caps;
+ unsigned int dma_burst_length;
+ phy_interface_t phy_interface;
+ struct macb_tx_skb rm9200_txq[2];
+ unsigned int max_tx_length;
+ u64 ethtool_stats[91];
+ unsigned int rx_frm_len_mask;
+ unsigned int jumbo_max_len;
+ u32 wol;
+ u32 wolopts;
+ u32 rx_watermark;
+ struct macb_ptp_info *ptp_info;
+ struct phy *sgmii_phy;
+ uint8_t hw_dma_cap;
+ spinlock_t tsu_clk_lock;
+ unsigned int tsu_rate;
+ struct ptp_clock *ptp_clock;
+ struct ptp_clock_info ptp_clock_info;
+ struct tsu_incr tsu_incr;
+ struct kernel_hwtstamp_config tstamp_config;
+ struct ethtool_rx_fs_list rx_fs_list;
+ spinlock_t rx_fs_lock;
+ unsigned int max_tuples;
+ struct work_struct hresp_err_bh_work;
+ int rx_bd_rd_prefetch;
+ int tx_bd_rd_prefetch;
+ u32 rx_intr_mask;
+ struct macb_pm_data pm_data;
+ const struct macb_usrio_config *usrio;
+};
+
+struct macb_ptp_info {
+ void (*ptp_init)(struct net_device *);
+ void (*ptp_remove)(struct net_device *);
+ s32 (*get_ptp_max_adj)();
+ unsigned int (*get_tsu_rate)(struct macb *);
+ int (*get_ts_info)(struct net_device *, struct kernel_ethtool_ts_info *);
+ int (*get_hwtst)(struct net_device *, struct kernel_hwtstamp_config *);
+ int (*set_hwtst)(struct net_device *, struct kernel_hwtstamp_config *, struct netlink_ext_ack *);
+};
+
+struct macb_usrio_config {
+ u32 mii;
+ u32 rmii;
+ u32 rgmii;
+ u32 refclk;
+ u32 hdfctlen;
+};
+
+struct macb_config {
+ u32 caps;
+ unsigned int dma_burst_length;
+ int (*clk_init)(struct platform_device *, struct clk **, struct clk **, struct clk **, struct clk **, struct clk **);
+ int (*init)(struct platform_device *);
+ unsigned int max_tx_length;
+ int jumbo_max_len;
+ const struct macb_usrio_config *usrio;
+};
+
+struct ethtool_rx_fs_item {
+ struct ethtool_rx_flow_spec fs;
+ struct list_head list;
+};
+
+struct macb_platform_data {
+ struct clk *pclk;
+ struct clk *hclk;
+};
+
+struct sifive_fu540_macb_mgmt {
+ void *reg;
+ long unsigned int rate;
+ struct clk_hw hw;
+};
+
+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_tt {
+ u16 bandwidth[8];
+ struct list_head tt_list;
+ struct list_head ps_list;
+ struct usb_tt *usb_tt;
+ int tt_port;
+};
+
+struct us_data;
+
+struct us_unusual_dev {
+ const char *vendorName;
+ const char *productName;
+ __u8 useProtocol;
+ __u8 useTransport;
+ int (*initFunction)(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_data {
+ struct mutex dev_mutex;
+ struct usb_device *pusb_dev;
+ struct usb_interface *pusb_intf;
+ const struct us_unusual_dev *unusual_dev;
+ u64 fflags;
+ long unsigned int 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 input_seq_state {
+ short unsigned int pos;
+ bool mutex_acquired;
+ int input_devices_state;
+};
+
+struct input_devres {
+ struct input_dev *input;
+};
+
+struct psmouse_attribute {
+ struct device_attribute dattr;
+ void *data;
+ ssize_t (*show)(struct psmouse *, void *, char *);
+ ssize_t (*set)(struct psmouse *, void *, const char *, size_t);
+ bool protect;
+};
+
+enum {
+ none = 0,
+ day = 1,
+ month = 2,
+ year = 3,
+};
+
+struct i2c_board_info {
+ char type[20];
+ short unsigned int flags;
+ short unsigned int 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 syscon_reboot_context {
+ struct regmap *map;
+ u32 offset;
+ u32 value;
+ u32 mask;
+ struct notifier_block restart_handler;
+};
+
+enum hwmon_temp_attributes {
+ hwmon_temp_enable = 0,
+ hwmon_temp_input = 1,
+ hwmon_temp_type = 2,
+ hwmon_temp_lcrit = 3,
+ hwmon_temp_lcrit_hyst = 4,
+ hwmon_temp_min = 5,
+ hwmon_temp_min_hyst = 6,
+ hwmon_temp_max = 7,
+ hwmon_temp_max_hyst = 8,
+ hwmon_temp_crit = 9,
+ hwmon_temp_crit_hyst = 10,
+ hwmon_temp_emergency = 11,
+ hwmon_temp_emergency_hyst = 12,
+ hwmon_temp_alarm = 13,
+ hwmon_temp_lcrit_alarm = 14,
+ hwmon_temp_min_alarm = 15,
+ hwmon_temp_max_alarm = 16,
+ hwmon_temp_crit_alarm = 17,
+ hwmon_temp_emergency_alarm = 18,
+ hwmon_temp_fault = 19,
+ hwmon_temp_offset = 20,
+ hwmon_temp_label = 21,
+ hwmon_temp_lowest = 22,
+ hwmon_temp_highest = 23,
+ hwmon_temp_reset_history = 24,
+ hwmon_temp_rated_min = 25,
+ hwmon_temp_rated_max = 26,
+ hwmon_temp_beep = 27,
+};
+
+enum hwmon_in_attributes {
+ hwmon_in_enable = 0,
+ hwmon_in_input = 1,
+ hwmon_in_min = 2,
+ hwmon_in_max = 3,
+ hwmon_in_lcrit = 4,
+ hwmon_in_crit = 5,
+ hwmon_in_average = 6,
+ hwmon_in_lowest = 7,
+ hwmon_in_highest = 8,
+ hwmon_in_reset_history = 9,
+ hwmon_in_label = 10,
+ hwmon_in_alarm = 11,
+ hwmon_in_min_alarm = 12,
+ hwmon_in_max_alarm = 13,
+ hwmon_in_lcrit_alarm = 14,
+ hwmon_in_crit_alarm = 15,
+ hwmon_in_rated_min = 16,
+ hwmon_in_rated_max = 17,
+ hwmon_in_beep = 18,
+ hwmon_in_fault = 19,
+};
+
+enum hwmon_curr_attributes {
+ hwmon_curr_enable = 0,
+ hwmon_curr_input = 1,
+ hwmon_curr_min = 2,
+ hwmon_curr_max = 3,
+ hwmon_curr_lcrit = 4,
+ hwmon_curr_crit = 5,
+ hwmon_curr_average = 6,
+ hwmon_curr_lowest = 7,
+ hwmon_curr_highest = 8,
+ hwmon_curr_reset_history = 9,
+ hwmon_curr_label = 10,
+ hwmon_curr_alarm = 11,
+ hwmon_curr_min_alarm = 12,
+ hwmon_curr_max_alarm = 13,
+ hwmon_curr_lcrit_alarm = 14,
+ hwmon_curr_crit_alarm = 15,
+ hwmon_curr_rated_min = 16,
+ hwmon_curr_rated_max = 17,
+ hwmon_curr_beep = 18,
+};
+
+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,
+};
+
+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,
+};
+
+union power_supply_propval {
+ int intval;
+ const char *strval;
+};
+
+struct power_supply;
+
+struct power_supply_desc {
+ const char *name;
+ enum power_supply_type type;
+ u8 charge_behaviours;
+ u32 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;
+};
+
+struct power_supply_battery_info;
+
+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 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;
+ const 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;
+ const struct power_supply_vbat_ri_table *vbat2ri_discharging;
+ int vbat2ri_discharging_size;
+ const struct power_supply_vbat_ri_table *vbat2ri_charging;
+ int vbat2ri_charging_size;
+ int bti_resistance_ohm;
+ int bti_resistance_tolerance;
+};
+
+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;
+};
+
+struct power_supply_maintenance_charge_table {
+ int charge_current_max_ua;
+ int charge_voltage_max_uv;
+ int charge_safety_timer_minutes;
+};
+
+struct power_supply_hwmon {
+ struct power_supply *psy;
+ long unsigned int *props;
+};
+
+struct hwmon_type_attr_list {
+ const u32 *attrs;
+ size_t n_attrs;
+};
+
+struct cpufreq_stats {
+ unsigned int total_trans;
+ long long unsigned int 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;
+ long long unsigned int reset_time;
+};
+
+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_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_attr {
+ struct attribute attr;
+ ssize_t (*show)(struct cpuidle_device *, char *);
+ ssize_t (*store)(struct cpuidle_device *, const char *, size_t);
+};
+
+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_driver_attr {
+ struct attribute attr;
+ ssize_t (*show)(struct cpuidle_driver *, char *);
+ ssize_t (*store)(struct cpuidle_driver *, const char *, size_t);
+};
+
+struct mmc_fixup {
+ const char *name;
+ u64 rev_start;
+ u64 rev_end;
+ unsigned int manfid;
+ short unsigned int oemid;
+ short unsigned int 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 sd_busy_data {
+ struct mmc_card *card;
+ u8 *reg_buf;
+};
+
+struct sdio_device_id {
+ __u8 class;
+ __u16 vendor;
+ __u16 device;
+ kernel_ulong_t driver_data;
+};
+
+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 of_mmc_spi {
+ struct mmc_spi_platform_data pdata;
+ int detect_irq;
+};
+
+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 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 {
+ 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 dmi_memdev_info {
+ const char *device;
+ const char *bank;
+ u64 size;
+ u16 handle;
+ u8 type;
+};
+
+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;
+};
+
+struct efi_system_resource_table {
+ u32 fw_resource_count;
+ u32 fw_resource_count_max;
+ u64 fw_resource_version;
+ u8 entries[0];
+};
+
+struct esre_entry {
+ union {
+ struct efi_system_resource_entry_v1 *esre1;
+ } esre;
+ struct kobject kobj;
+ struct list_head list;
+};
+
+struct esre_attribute {
+ struct attribute attr;
+ ssize_t (*show)(struct esre_entry *, char *);
+ ssize_t (*store)(struct esre_entry *, const char *, size_t);
+};
+
+struct tasklet_struct {
+ struct tasklet_struct *next;
+ long unsigned int state;
+ atomic_t count;
+ bool use_callback;
+ union {
+ void (*func)(long unsigned int);
+ void (*callback)(struct tasklet_struct *);
+ };
+ long unsigned int data;
+};
+
+struct crypto_engine;
+
+struct data_queue {
+ struct virtqueue *vq;
+ spinlock_t lock;
+ char name[32];
+ struct crypto_engine *engine;
+ struct tasklet_struct done_task;
+};
+
+struct virtio_crypto {
+ struct virtio_device *vdev;
+ struct virtqueue *ctrl_vq;
+ struct data_queue *data_vq;
+ struct work_struct config_work;
+ spinlock_t ctrl_lock;
+ u32 max_data_queues;
+ u32 curr_queue;
+ u32 crypto_services;
+ u32 cipher_algo_l;
+ u32 cipher_algo_h;
+ u32 hash_algo;
+ u32 mac_algo_l;
+ u32 mac_algo_h;
+ u32 aead_algo;
+ u32 akcipher_algo;
+ u32 max_cipher_key_len;
+ u32 max_auth_key_len;
+ u64 max_size;
+ long unsigned int status;
+ atomic_t ref_count;
+ struct list_head list;
+ struct module *owner;
+ uint8_t dev_id;
+ bool affinity_hint_set;
+};
+
+enum clocksource_ids {
+ CSID_GENERIC = 0,
+ CSID_ARM_ARCH_COUNTER = 1,
+ CSID_X86_TSC_EARLY = 2,
+ CSID_X86_TSC = 3,
+ CSID_X86_KVM_CLK = 4,
+ CSID_X86_ART = 5,
+ CSID_MAX = 6,
+};
+
+typedef int (*of_init_fn_1_ret)(struct device_node *);
+
+enum vdso_clock_mode {
+ VDSO_CLOCKMODE_NONE = 0,
+ VDSO_CLOCKMODE_ARCHTIMER = 1,
+ VDSO_CLOCKMODE_MAX = 2,
+ VDSO_CLOCKMODE_TIMENS = 2147483647,
+};
+
+struct clocksource_base;
+
+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;
+ u32 freq_khz;
+ int rating;
+ enum clocksource_ids id;
+ enum vdso_clock_mode vdso_clock_mode;
+ long unsigned int flags;
+ struct clocksource_base *base;
+ 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 clocksource_base {
+ enum clocksource_ids id;
+ u32 freq_khz;
+ u64 offset;
+ u32 numerator;
+ u32 denominator;
+};
+
+struct of_endpoint {
+ unsigned int port;
+ unsigned int id;
+ const struct device_node *local_node;
+};
+
+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;
+ u8 fwlink_flags;
+};
+
+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;
+ long unsigned int flags;
+ void *hostdata;
+ const struct logic_pio_host_ops *ops;
+};
+
+struct logic_pio_host_ops {
+ u32 (*in)(void *, long unsigned int, size_t);
+ void (*out)(void *, long unsigned int, u32, size_t);
+ u32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int);
+ void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);
+};
+
+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_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);
+ int (*translate)(__be32 *, u64, int);
+ int flag_cells;
+ unsigned int (*get_flags)(const __be32 *);
+};
+
+struct of_pci_range {
+ union {
+ u64 pci_addr;
+ u64 bus_addr;
+ };
+ u64 cpu_addr;
+ u64 size;
+ u32 flags;
+};
+
+typedef __u32 __rpmsg32;
+
+struct rpmsg_ns_msg {
+ char name[32];
+ __rpmsg32 addr;
+ __rpmsg32 flags;
+};
+
+enum rpmsg_ns_flags {
+ RPMSG_NS_CREATE = 0,
+ RPMSG_NS_DESTROY = 1,
+};
+
+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,
+ IIO_DELTA_ANGL = 35,
+ IIO_DELTA_VELOCITY = 36,
+ IIO_COLORTEMP = 37,
+ IIO_CHROMATICITY = 38,
+};
+
+enum iio_modifier {
+ IIO_NO_MOD = 0,
+ IIO_MOD_X = 1,
+ IIO_MOD_Y = 2,
+ IIO_MOD_Z = 3,
+ IIO_MOD_X_AND_Y = 4,
+ IIO_MOD_X_AND_Z = 5,
+ IIO_MOD_Y_AND_Z = 6,
+ IIO_MOD_X_AND_Y_AND_Z = 7,
+ IIO_MOD_X_OR_Y = 8,
+ IIO_MOD_X_OR_Z = 9,
+ IIO_MOD_Y_OR_Z = 10,
+ IIO_MOD_X_OR_Y_OR_Z = 11,
+ IIO_MOD_LIGHT_BOTH = 12,
+ IIO_MOD_LIGHT_IR = 13,
+ IIO_MOD_ROOT_SUM_SQUARED_X_Y = 14,
+ IIO_MOD_SUM_SQUARED_X_Y_Z = 15,
+ IIO_MOD_LIGHT_CLEAR = 16,
+ IIO_MOD_LIGHT_RED = 17,
+ IIO_MOD_LIGHT_GREEN = 18,
+ IIO_MOD_LIGHT_BLUE = 19,
+ IIO_MOD_QUATERNION = 20,
+ IIO_MOD_TEMP_AMBIENT = 21,
+ IIO_MOD_TEMP_OBJECT = 22,
+ IIO_MOD_NORTH_MAGN = 23,
+ IIO_MOD_NORTH_TRUE = 24,
+ IIO_MOD_NORTH_MAGN_TILT_COMP = 25,
+ IIO_MOD_NORTH_TRUE_TILT_COMP = 26,
+ IIO_MOD_RUNNING = 27,
+ IIO_MOD_JOGGING = 28,
+ IIO_MOD_WALKING = 29,
+ IIO_MOD_STILL = 30,
+ IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z = 31,
+ IIO_MOD_I = 32,
+ IIO_MOD_Q = 33,
+ IIO_MOD_CO2 = 34,
+ IIO_MOD_VOC = 35,
+ IIO_MOD_LIGHT_UV = 36,
+ IIO_MOD_LIGHT_DUV = 37,
+ IIO_MOD_PM1 = 38,
+ IIO_MOD_PM2P5 = 39,
+ IIO_MOD_PM4 = 40,
+ IIO_MOD_PM10 = 41,
+ IIO_MOD_ETHANOL = 42,
+ IIO_MOD_H2 = 43,
+ IIO_MOD_O2 = 44,
+ IIO_MOD_LINEAR_X = 45,
+ IIO_MOD_LINEAR_Y = 46,
+ IIO_MOD_LINEAR_Z = 47,
+ IIO_MOD_PITCH = 48,
+ IIO_MOD_YAW = 49,
+ IIO_MOD_ROLL = 50,
+ IIO_MOD_LIGHT_UVA = 51,
+ IIO_MOD_LIGHT_UVB = 52,
+};
+
+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,
+};
+
+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,
+};
+
+enum iio_available_type {
+ IIO_AVAIL_LIST = 0,
+ IIO_AVAIL_RANGE = 1,
+};
+
+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,
+ IIO_CHAN_INFO_TROUGH = 29,
+};
+
+enum iio_shared_by {
+ IIO_SEPARATE = 0,
+ IIO_SHARED_BY_TYPE = 1,
+ IIO_SHARED_BY_DIR = 2,
+ IIO_SHARED_BY_ALL = 3,
+};
+
+enum iio_endian {
+ IIO_CPU = 0,
+ IIO_BE = 1,
+ IIO_LE = 2,
+};
+
+struct iio_dev;
+
+struct iio_chan_spec;
+
+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;
+};
+
+struct iio_buffer;
+
+struct iio_trigger;
+
+struct iio_poll_func;
+
+struct iio_info;
+
+struct iio_buffer_setup_ops;
+
+struct iio_dev {
+ int modes;
+ struct device dev;
+ struct iio_buffer *buffer;
+ int scan_bytes;
+ const long unsigned int *available_scan_masks;
+ unsigned int masklength;
+ const long unsigned int *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;
+};
+
+struct iio_scan_type {
+ char sign;
+ u8 realbits;
+ u8 storagebits;
+ u8 shift;
+ u8 repeat;
+ enum iio_endian endianness;
+};
+
+struct iio_event_spec;
+
+struct iio_chan_spec {
+ enum iio_chan_type type;
+ int channel;
+ int channel2;
+ long unsigned int address;
+ int scan_index;
+ union {
+ struct iio_scan_type scan_type;
+ struct {
+ const struct iio_scan_type *ext_scan_type;
+ unsigned int num_ext_scan_type;
+ };
+ };
+ long int info_mask_separate;
+ long int info_mask_separate_available;
+ long int info_mask_shared_by_type;
+ long int info_mask_shared_by_type_available;
+ long int info_mask_shared_by_dir;
+ long int info_mask_shared_by_dir_available;
+ long int info_mask_shared_by_all;
+ long int 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;
+ unsigned int has_ext_scan_type: 1;
+};
+
+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_spec {
+ enum iio_event_type type;
+ enum iio_event_direction dir;
+ long unsigned int mask_separate;
+ long unsigned int mask_shared_by_type;
+ long unsigned int mask_shared_by_dir;
+ long unsigned int mask_shared_by_all;
+};
+
+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);
+ int (*read_raw_multi)(struct iio_dev *, const struct iio_chan_spec *, int, int *, int *, long int);
+ int (*read_avail)(struct iio_dev *, const struct iio_chan_spec *, const int **, int *, int *, long int);
+ int (*write_raw)(struct iio_dev *, const struct iio_chan_spec *, int, int, long int);
+ 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);
+ 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 (*read_event_label)(struct iio_dev *, const struct iio_chan_spec *, enum iio_event_type, enum iio_event_direction, char *);
+ int (*validate_trigger)(struct iio_dev *, struct iio_trigger *);
+ int (*get_current_scan_type)(const struct iio_dev *, const struct iio_chan_spec *);
+ int (*update_scan_mode)(struct iio_dev *, const long unsigned int *);
+ 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_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 long unsigned int *);
+};
+
+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;
+ long unsigned int flags;
+ struct dentry *debugfs_dentry;
+ unsigned int cached_reg_addr;
+ char read_buf[20];
+ unsigned int read_buf_len;
+};
+
+struct iio_event_data {
+ __u64 id;
+ __s64 timestamp;
+};
+
+struct iio_ioctl_handler {
+ struct list_head entry;
+ long int (*ioctl)(struct iio_dev *, struct file *, unsigned int, long unsigned int);
+};
+
+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;
+ long unsigned int flags;
+ struct attribute_group group;
+ struct mutex read_lock;
+ struct iio_ioctl_handler ioctl_handler;
+};
+
+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;
+};
+
+struct iio_const_attr {
+ const char *string;
+ struct device_attribute dev_attr;
+};
+
+struct iio_dev_buffer_pair {
+ struct iio_dev *indio_dev;
+ struct iio_buffer *buffer;
+};
+
+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;
+};
+
+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;
+};
+
+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, long unsigned int, long unsigned int);
+ const char *name;
+ 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;
+};
+
+typedef size_t (*iov_step_f)(void *, size_t, size_t, void *, void *);
+
+typedef size_t (*iov_ustep_f)(void *, size_t, size_t, void *, void *);
+
+struct csum_state {
+ __wsum csum;
+ size_t off;
+};
+
+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,
+};
+
+struct skb_checksum_ops {
+ __wsum (*update)(const void *, int, __wsum);
+ __wsum (*combine)(__wsum, __wsum, int, int);
+};
+
+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 xdp_action {
+ XDP_ABORTED = 0,
+ XDP_DROP = 1,
+ XDP_PASS = 2,
+ XDP_TX = 3,
+ XDP_REDIRECT = 4,
+};
+
+typedef unsigned int (*bpf_func_t)(const void *, const struct bpf_insn *);
+
+struct ifbond {
+ __s32 bond_mode;
+ __s32 num_slaves;
+ __s32 miimon;
+};
+
+typedef struct ifbond ifbond;
+
+struct ifslave {
+ __s32 slave_id;
+ char slave_name[16];
+ __s8 link;
+ __s8 state;
+ __u32 link_failure_count;
+};
+
+typedef struct ifslave ifslave;
+
+enum netdev_queue_type {
+ NETDEV_QUEUE_TYPE_RX = 0,
+ NETDEV_QUEUE_TYPE_TX = 1,
+};
+
+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,
+};
+
+struct net_device_path_stack {
+ int num_paths;
+ struct net_device_path path[5];
+};
+
+struct bpf_xdp_link {
+ struct bpf_link link;
+ struct net_device *dev;
+ int flags;
+};
+
+struct netdev_net_notifier {
+ struct list_head list;
+ struct notifier_block *nb;
+};
+
+struct phy_link_topology {
+ struct xarray phys;
+ u32 next_phy_index;
+};
+
+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;
+};
+
+struct netdev_notifier_info_ext {
+ struct netdev_notifier_info info;
+ union {
+ u32 mtu;
+ } ext;
+};
+
+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 netdev_notifier_changelowerstate_info {
+ struct netdev_notifier_info info;
+ void *lower_state_info;
+};
+
+struct netdev_notifier_pre_changeaddr_info {
+ struct netdev_notifier_info info;
+ const unsigned char *dev_addr;
+};
+
+enum netdev_offload_xstats_type {
+ NETDEV_OFFLOAD_XSTATS_TYPE_L3 = 1,
+};
+
+struct netdev_notifier_offload_xstats_rd {
+ struct rtnl_hw_stats64 stats;
+ bool used;
+};
+
+struct netdev_notifier_offload_xstats_ru {
+ bool used;
+};
+
+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 sd_flow_limit {
+ u64 count;
+ unsigned int num_buckets;
+ unsigned int history_head;
+ u16 history[128];
+ u8 buckets[0];
+};
+
+enum {
+ NESTED_SYNC_IMM_BIT = 0,
+ NESTED_SYNC_TODO_BIT = 1,
+};
+
+struct netdev_nested_priv {
+ unsigned char flags;
+ void *data;
+};
+
+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 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;
+};
+
+enum qdisc_state_t {
+ __QDISC_STATE_SCHED = 0,
+ __QDISC_STATE_DEACTIVATED = 1,
+ __QDISC_STATE_MISSED = 2,
+ __QDISC_STATE_DRAINING = 3,
+};
+
+enum qdisc_state2_t {
+ __QDISC_STATE2_RUNNING = 0,
+};
+
+struct tcf_walker {
+ int stop;
+ int skip;
+ int count;
+ bool nonempty;
+ long unsigned int cookie;
+ int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
+};
+
+struct tcf_exts {
+ int action;
+ int police;
+};
+
+typedef unsigned int (*bpf_dispatcher_fn)(const void *, const struct bpf_insn *, unsigned int (*)(const void *, const struct bpf_insn *));
+
+struct bpf_skb_data_end {
+ struct qdisc_skb_cb qdisc_cb;
+ void *data_meta;
+ void *data_end;
+};
+
+enum xdp_buff_flags {
+ XDP_FLAGS_HAS_FRAGS = 1,
+ XDP_FLAGS_FRAGS_PF_MEMALLOC = 2,
+};
+
+struct rps_sock_flow_table {
+ u32 mask;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ u32 ents[0];
+};
+
+enum {
+ SCM_TSTAMP_SND = 0,
+ SCM_TSTAMP_SCHED = 1,
+ SCM_TSTAMP_ACK = 2,
+};
+
+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];
+};
+
+typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
+
+struct dev_kfree_skb_cb {
+ enum skb_drop_reason reason;
+};
+
+enum {
+ NAPI_F_PREFER_BUSY_POLL = 1,
+ NAPI_F_END_ON_RESCHED = 2,
+};
+
+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;
+};
+
+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_XDP_RX_METADATA_FEATURES = 5,
+ NETDEV_A_DEV_XSK_FEATURES = 6,
+ __NETDEV_A_DEV_MAX = 7,
+ NETDEV_A_DEV_MAX = 6,
+};
+
+enum {
+ NETDEV_A_PAGE_POOL_ID = 1,
+ NETDEV_A_PAGE_POOL_IFINDEX = 2,
+ NETDEV_A_PAGE_POOL_NAPI_ID = 3,
+ NETDEV_A_PAGE_POOL_INFLIGHT = 4,
+ NETDEV_A_PAGE_POOL_INFLIGHT_MEM = 5,
+ NETDEV_A_PAGE_POOL_DETACH_TIME = 6,
+ NETDEV_A_PAGE_POOL_DMABUF = 7,
+ __NETDEV_A_PAGE_POOL_MAX = 8,
+ NETDEV_A_PAGE_POOL_MAX = 7,
+};
+
+enum {
+ NETDEV_A_NAPI_IFINDEX = 1,
+ NETDEV_A_NAPI_ID = 2,
+ NETDEV_A_NAPI_IRQ = 3,
+ NETDEV_A_NAPI_PID = 4,
+ __NETDEV_A_NAPI_MAX = 5,
+ NETDEV_A_NAPI_MAX = 4,
+};
+
+enum {
+ NETDEV_A_QUEUE_ID = 1,
+ NETDEV_A_QUEUE_IFINDEX = 2,
+ NETDEV_A_QUEUE_TYPE = 3,
+ NETDEV_A_QUEUE_NAPI_ID = 4,
+ NETDEV_A_QUEUE_DMABUF = 5,
+ __NETDEV_A_QUEUE_MAX = 6,
+ NETDEV_A_QUEUE_MAX = 5,
+};
+
+enum {
+ NETDEV_A_QSTATS_IFINDEX = 1,
+ NETDEV_A_QSTATS_QUEUE_TYPE = 2,
+ NETDEV_A_QSTATS_QUEUE_ID = 3,
+ NETDEV_A_QSTATS_SCOPE = 4,
+ NETDEV_A_QSTATS_RX_PACKETS = 8,
+ NETDEV_A_QSTATS_RX_BYTES = 9,
+ NETDEV_A_QSTATS_TX_PACKETS = 10,
+ NETDEV_A_QSTATS_TX_BYTES = 11,
+ NETDEV_A_QSTATS_RX_ALLOC_FAIL = 12,
+ NETDEV_A_QSTATS_RX_HW_DROPS = 13,
+ NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS = 14,
+ NETDEV_A_QSTATS_RX_CSUM_COMPLETE = 15,
+ NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY = 16,
+ NETDEV_A_QSTATS_RX_CSUM_NONE = 17,
+ NETDEV_A_QSTATS_RX_CSUM_BAD = 18,
+ NETDEV_A_QSTATS_RX_HW_GRO_PACKETS = 19,
+ NETDEV_A_QSTATS_RX_HW_GRO_BYTES = 20,
+ NETDEV_A_QSTATS_RX_HW_GRO_WIRE_PACKETS = 21,
+ NETDEV_A_QSTATS_RX_HW_GRO_WIRE_BYTES = 22,
+ NETDEV_A_QSTATS_RX_HW_DROP_RATELIMITS = 23,
+ NETDEV_A_QSTATS_TX_HW_DROPS = 24,
+ NETDEV_A_QSTATS_TX_HW_DROP_ERRORS = 25,
+ NETDEV_A_QSTATS_TX_CSUM_NONE = 26,
+ NETDEV_A_QSTATS_TX_NEEDS_CSUM = 27,
+ NETDEV_A_QSTATS_TX_HW_GSO_PACKETS = 28,
+ NETDEV_A_QSTATS_TX_HW_GSO_BYTES = 29,
+ NETDEV_A_QSTATS_TX_HW_GSO_WIRE_PACKETS = 30,
+ NETDEV_A_QSTATS_TX_HW_GSO_WIRE_BYTES = 31,
+ NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS = 32,
+ NETDEV_A_QSTATS_TX_STOP = 33,
+ NETDEV_A_QSTATS_TX_WAKE = 34,
+ __NETDEV_A_QSTATS_MAX = 35,
+ NETDEV_A_QSTATS_MAX = 34,
+};
+
+enum {
+ NETDEV_A_DMABUF_IFINDEX = 1,
+ NETDEV_A_DMABUF_QUEUES = 2,
+ NETDEV_A_DMABUF_FD = 3,
+ NETDEV_A_DMABUF_ID = 4,
+ __NETDEV_A_DMABUF_MAX = 5,
+ NETDEV_A_DMABUF_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_PAGE_POOL_GET = 5,
+ NETDEV_CMD_PAGE_POOL_ADD_NTF = 6,
+ NETDEV_CMD_PAGE_POOL_DEL_NTF = 7,
+ NETDEV_CMD_PAGE_POOL_CHANGE_NTF = 8,
+ NETDEV_CMD_PAGE_POOL_STATS_GET = 9,
+ NETDEV_CMD_QUEUE_GET = 10,
+ NETDEV_CMD_NAPI_GET = 11,
+ NETDEV_CMD_QSTATS_GET = 12,
+ NETDEV_CMD_BIND_RX = 13,
+ __NETDEV_CMD_MAX = 14,
+ NETDEV_CMD_MAX = 13,
+};
+
+enum {
+ NETDEV_NLGRP_MGMT = 0,
+ NETDEV_NLGRP_PAGE_POOL = 1,
+};
+
+struct __kernel_old_timespec {
+ __kernel_old_time_t tv_sec;
+ long int tv_nsec;
+};
+
+struct mmsghdr {
+ struct user_msghdr msg_hdr;
+ unsigned int msg_len;
+};
+
+struct cmsghdr {
+ __kernel_size_t cmsg_len;
+ int cmsg_level;
+ int cmsg_type;
+};
+
+struct compat_mmsghdr {
+ struct compat_msghdr msg_hdr;
+ compat_uint_t msg_len;
+};
+
+struct compat_cmsghdr {
+ compat_size_t cmsg_len;
+ compat_int_t cmsg_level;
+ compat_int_t cmsg_type;
+};
+
+struct unix_edge;
+
+struct scm_fp_list {
+ short int count;
+ short int count_unix;
+ short int max;
+ bool inflight;
+ bool dead;
+ struct list_head vertices;
+ struct unix_edge *edges;
+ 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;
+};
+
+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 {
+ 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,
+};
+
+enum genl_validate_flags {
+ GENL_DONT_VALIDATE_STRICT = 1,
+ GENL_DONT_VALIDATE_DUMP = 2,
+ GENL_DONT_VALIDATE_DUMP_STRICT = 4,
+};
+
+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 genl_start_context {
+ const struct genl_family *family;
+ struct nlmsghdr *nlh;
+ struct netlink_ext_ack *extack;
+ const struct genl_split_ops *ops;
+ int hdrlen;
+};
+
+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 rss_req_info {
+ struct ethnl_req_info base;
+ u32 rss_context;
+};
+
+struct rss_reply_data {
+ struct ethnl_reply_data base;
+ bool no_key_fields;
+ u32 indir_size;
+ u32 hkey_size;
+ u32 hfunc;
+ u32 input_xfrm;
+ u32 *indir_table;
+ u8 *hkey;
+};
+
+struct rss_nl_dump_ctx {
+ long unsigned int ifindex;
+ long unsigned int ctx_idx;
+ unsigned int match_ifindex;
+ unsigned int start_ctx;
+};
+
+struct eee_reply_data {
+ struct ethnl_reply_data base;
+ struct ethtool_keee eee;
+};
+
+struct ethnl_module_fw_flash_ntf_params {
+ u32 portid;
+ u32 seq;
+ bool closed_sock;
+};
+
+struct ethtool_module_fw_flash_params {
+ __be32 password;
+ u8 password_valid: 1;
+};
+
+struct ethtool_cmis_cdb {
+ u8 cmis_rev;
+ u8 read_write_len_ext;
+ u16 max_completion_time;
+};
+
+enum ethtool_cmis_cdb_cmd_id {
+ ETHTOOL_CMIS_CDB_CMD_QUERY_STATUS = 0,
+ ETHTOOL_CMIS_CDB_CMD_MODULE_FEATURES = 64,
+ ETHTOOL_CMIS_CDB_CMD_FW_MANAGMENT_FEATURES = 65,
+ ETHTOOL_CMIS_CDB_CMD_START_FW_DOWNLOAD = 257,
+ ETHTOOL_CMIS_CDB_CMD_WRITE_FW_BLOCK_LPL = 259,
+ ETHTOOL_CMIS_CDB_CMD_COMPLETE_FW_DOWNLOAD = 263,
+ ETHTOOL_CMIS_CDB_CMD_RUN_FW_IMAGE = 265,
+ ETHTOOL_CMIS_CDB_CMD_COMMIT_FW_IMAGE = 266,
+};
+
+struct ethtool_cmis_cdb_request {
+ __be16 id;
+ union {
+ struct {
+ __be16 epl_len;
+ u8 lpl_len;
+ u8 chk_code;
+ u8 resv1;
+ u8 resv2;
+ u8 payload[120];
+ };
+ struct {
+ __be16 epl_len;
+ u8 lpl_len;
+ u8 chk_code;
+ u8 resv1;
+ u8 resv2;
+ u8 payload[120];
+ } body;
+ };
+};
+
+struct ethtool_cmis_cdb_cmd_args {
+ struct ethtool_cmis_cdb_request req;
+ u16 max_duration;
+ u8 read_write_len_ext;
+ u8 msleep_pre_rpl;
+ u8 rpl_exp_len;
+ u8 flags;
+ char *err_msg;
+};
+
+struct ethtool_cmis_cdb_rpl_hdr {
+ u8 rpl_len;
+ u8 rpl_chk_code;
+};
+
+struct ethtool_cmis_cdb_rpl {
+ struct ethtool_cmis_cdb_rpl_hdr hdr;
+ u8 payload[120];
+};
+
+struct cmis_rev_rpl {
+ u8 rev;
+};
+
+struct cmis_cdb_advert_rpl {
+ u8 inst_supported;
+ u8 read_write_len_ext;
+ u8 resv1;
+ u8 resv2;
+};
+
+struct cmis_password_entry_pl {
+ __be32 password;
+};
+
+struct cmis_cdb_query_status_pl {
+ u16 response_delay;
+};
+
+struct cmis_cdb_query_status_rpl {
+ u8 length;
+ u8 status;
+};
+
+struct cmis_cdb_module_features_rpl {
+ u8 resv1[34];
+ __be16 max_completion_time;
+};
+
+struct cmis_wait_for_cond_rpl {
+ u8 state;
+};
+
+enum {
+ SOCK_WAKE_IO = 0,
+ SOCK_WAKE_WAITD = 1,
+ SOCK_WAKE_SPACE = 2,
+ SOCK_WAKE_URG = 3,
+};
+
+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,
+};
+
+union tcp_word_hdr {
+ struct tcphdr hdr;
+ __be32 words[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 tcp_ca_state {
+ TCP_CA_Open = 0,
+ TCP_CA_Disorder = 1,
+ TCP_CA_CWR = 2,
+ TCP_CA_Recovery = 3,
+ TCP_CA_Loss = 4,
+};
+
+struct tcp_sack_block_wire {
+ __be32 start_seq;
+ __be32 end_seq;
+};
+
+enum tcp_queue {
+ TCP_FRAG_IN_WRITE_QUEUE = 0,
+ TCP_FRAG_IN_RTX_QUEUE = 1,
+};
+
+enum tcp_skb_cb_sacked_flags {
+ TCPCB_SACKED_ACKED = 1,
+ TCPCB_SACKED_RETRANS = 2,
+ TCPCB_LOST = 4,
+ TCPCB_TAGBITS = 7,
+ TCPCB_REPAIRED = 16,
+ TCPCB_EVER_RETRANS = 128,
+ TCPCB_RETRANS = 146,
+};
+
+enum tcp_ca_ack_event_flags {
+ CA_ACK_SLOWPATH = 1,
+ CA_ACK_WIN_UPDATE = 2,
+ CA_ACK_ECE = 4,
+};
+
+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,
+};
+
+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;
+};
+
+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,
+};
+
+typedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16);
+
+typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
+
+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 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_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 {
+ 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,
+};
+
+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,
+};
+
+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 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 geneve_opt {
+ __be16 opt_class;
+ u8 type;
+ u8 length: 5;
+ u8 r3: 1;
+ u8 r2: 1;
+ u8 r1: 1;
+ u8 opt_data[0];
+};
+
+struct vxlan_metadata {
+ u32 gbp;
+};
+
+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 snmp_mib {
+ const char *name;
+ int entry;
+};
+
+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 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];
+};
+
+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;
+ long unsigned int tx_bitmask;
+};
+
+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[20];
+ 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 *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;
+ long unsigned int 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;
+};
+
+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,
+};
+
+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 {
+ union {
+ u32 hard;
+ u32 proto;
+ u32 byid;
+ u32 aevent;
+ u32 type;
+ } data;
+ u32 seq;
+ u32 portid;
+ u32 event;
+ struct net *net;
+};
+
+struct xfrm_skb_cb {
+ struct xfrm_tunnel_skb_cb header;
+ union {
+ struct {
+ __u32 low;
+ __u32 hi;
+ } output;
+ struct {
+ __be32 low;
+ __be32 hi;
+ } input;
+ } seq;
+};
+
+typedef __kernel_clock_t clock_t;
+
+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_DPLL_PIN = 65,
+ __IFLA_MAX = 66,
+};
+
+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 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 ifla_cacheinfo {
+ __u32 max_reasm_len;
+ __u32 tstamp;
+ __u32 reachable_time;
+ __u32 retrans_time;
+};
+
+struct ifaddrmsg {
+ __u8 ifa_family;
+ __u8 ifa_prefixlen;
+ __u8 ifa_flags;
+ __u8 ifa_scope;
+ __u32 ifa_index;
+};
+
+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,
+};
+
+struct ifa_cacheinfo {
+ __u32 ifa_prefered;
+ __u32 ifa_valid;
+ __u32 cstamp;
+ __u32 tstamp;
+};
+
+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,
+};
+
+struct ifinfomsg {
+ unsigned char ifi_family;
+ unsigned char __ifi_pad;
+ short unsigned int ifi_type;
+ int ifi_index;
+ unsigned int ifi_flags;
+ unsigned int ifi_change;
+};
+
+struct prefixmsg {
+ unsigned char prefix_family;
+ unsigned char prefix_pad1;
+ short unsigned int prefix_pad2;
+ int prefix_ifindex;
+ unsigned char prefix_type;
+ unsigned char prefix_len;
+ unsigned char prefix_flags;
+ unsigned char prefix_pad3;
+};
+
+enum {
+ PREFIX_UNSPEC = 0,
+ PREFIX_ADDRESS = 1,
+ PREFIX_CACHEINFO = 2,
+ __PREFIX_MAX = 3,
+};
+
+struct prefix_cacheinfo {
+ __u32 preferred_time;
+ __u32 valid_time;
+};
+
+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,
+};
+
+struct in6_ifreq {
+ struct in6_addr ifr6_addr;
+ __u32 ifr6_prefixlen;
+ int ifr6_ifindex;
+};
+
+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,
+};
+
+struct ipv6_params {
+ __s32 disable_ipv6;
+ __s32 autoconf;
+};
+
+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 *);
+};
+
+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,
+};
+
+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;
+ long unsigned int cstamp;
+ long unsigned int 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 in6_validator_info {
+ struct in6_addr i6vi_addr;
+ struct inet6_dev *i6vi_dev;
+ struct netlink_ext_ack *extack;
+};
+
+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;
+};
+
+union fwnet_hwaddr {
+ u8 u[16];
+ struct {
+ __be64 uniq_id;
+ u8 max_rec;
+ u8 sspd;
+ u8 fifo[6];
+ } uc;
+};
+
+struct netconfmsg {
+ __u8 ncm_family;
+};
+
+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 cleanup_prefix_rt_t {
+ CLEANUP_PREFIX_RT_NOP = 0,
+ CLEANUP_PREFIX_RT_DEL = 1,
+ CLEANUP_PREFIX_RT_EXPIRE = 2,
+};
+
+enum {
+ IPV6_SADDR_RULE_INIT = 0,
+ IPV6_SADDR_RULE_LOCAL = 1,
+ IPV6_SADDR_RULE_SCOPE = 2,
+ IPV6_SADDR_RULE_PREFERRED = 3,
+ IPV6_SADDR_RULE_OIF = 4,
+ IPV6_SADDR_RULE_LABEL = 5,
+ IPV6_SADDR_RULE_PRIVACY = 6,
+ IPV6_SADDR_RULE_ORCHID = 7,
+ IPV6_SADDR_RULE_PREFIX = 8,
+ IPV6_SADDR_RULE_MAX = 9,
+};
+
+struct ipv6_saddr_score {
+ int rule;
+ int addr_type;
+ struct inet6_ifaddr *ifa;
+ long unsigned int 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 if6_iter_state {
+ struct seq_net_private p;
+ int bucket;
+ int offset;
+};
+
+enum addr_type_t {
+ UNICAST_ADDR = 0,
+ MULTICAST_ADDR = 1,
+ ANYCAST_ADDR = 2,
+};
+
+struct inet6_fill_args {
+ u32 portid;
+ u32 seq;
+ int event;
+ unsigned int flags;
+ int netnsid;
+ int ifindex;
+ enum addr_type_t type;
+};
+
+enum {
+ DAD_PROCESS = 0,
+ DAD_BEGIN = 1,
+ DAD_ABORT = 2,
+};
+
+enum pkt_hash_types {
+ PKT_HASH_TYPE_NONE = 0,
+ PKT_HASH_TYPE_L2 = 1,
+ PKT_HASH_TYPE_L3 = 2,
+ PKT_HASH_TYPE_L4 = 3,
+};
+
+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 tcp6_sock {
+ struct tcp_sock tcp;
+ struct ipv6_pinfo inet6;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+enum flowlabel_reflect {
+ FLOWLABEL_REFLECT_ESTABLISHED = 1,
+ FLOWLABEL_REFLECT_TCP_RESET = 2,
+ FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
+};
+
+union tcp_ao_addr {
+ struct in_addr a4;
+ struct in6_addr a6;
+};
+
+struct tcp_ao_hdr {
+ u8 kind;
+ u8 length;
+ u8 keyid;
+ u8 rnext_keyid;
+};
+
+struct tcp_ao_key {
+ struct hlist_node node;
+ union tcp_ao_addr addr;
+ u8 key[80];
+ unsigned int tcp_sigpool_id;
+ unsigned int digest_size;
+ int l3index;
+ u8 prefixlen;
+ u8 family;
+ u8 keylen;
+ u8 keyflags;
+ u8 sndid;
+ u8 rcvid;
+ u8 maclen;
+ struct callback_head rcu;
+ atomic64_t pkt_good;
+ atomic64_t pkt_bad;
+ u8 traffic_keys[0];
+};
+
+enum tcp_tw_status {
+ TCP_TW_SUCCESS = 0,
+ TCP_TW_RST = 1,
+ TCP_TW_ACK = 2,
+ TCP_TW_SYN = 3,
+};
+
+struct tcp_md5sig_key {
+ struct hlist_node node;
+ u8 keylen;
+ u8 family;
+ u8 prefixlen;
+ u8 flags;
+ union tcp_ao_addr addr;
+ int l3index;
+ u8 key[80];
+ struct callback_head rcu;
+};
+
+enum tcp_seq_states {
+ TCP_SEQ_STATE_LISTENING = 0,
+ TCP_SEQ_STATE_ESTABLISHED = 1,
+};
+
+struct tcp_seq_afinfo {
+ sa_family_t family;
+};
+
+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 tcp_key {
+ union {
+ struct {
+ struct tcp_ao_key *ao_key;
+ char *traffic_key;
+ u32 sne;
+ u8 rcv_next;
+ };
+ struct tcp_md5sig_key *md5_key;
+ };
+ enum {
+ TCP_KEY_NONE = 0,
+ TCP_KEY_MD5 = 1,
+ TCP_KEY_AO = 2,
+ } type;
+};
+
+typedef u32 inet6_ehashfn_t(const struct net *, const struct in6_addr *, const u16, const struct in6_addr *, const __be16);
+
+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];
+};
+
+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,
+};
+
+enum ioam6_event_type {
+ IOAM6_EVENT_UNSPEC = 0,
+ IOAM6_EVENT_TRACE = 1,
+};
+
+enum ioam6_event_attr {
+ IOAM6_EVENT_ATTR_UNSPEC = 0,
+ IOAM6_EVENT_ATTR_TRACE_NAMESPACE = 1,
+ IOAM6_EVENT_ATTR_TRACE_NODELEN = 2,
+ IOAM6_EVENT_ATTR_TRACE_TYPE = 3,
+ IOAM6_EVENT_ATTR_TRACE_DATA = 4,
+ __IOAM6_EVENT_ATTR_MAX = 5,
+};
+
+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 ioam6_pernet_data {
+ struct mutex lock;
+ struct rhashtable namespaces;
+ struct rhashtable schemas;
+};
+
+struct ioam6_schema;
+
+struct ioam6_namespace {
+ struct rhash_head head;
+ struct callback_head rcu;
+ struct ioam6_schema *schema;
+ __be16 id;
+ __be32 data;
+ __be64 data_wide;
+};
+
+struct ioam6_schema {
+ struct rhash_head head;
+ struct callback_head rcu;
+ struct ioam6_namespace *ns;
+ u32 id;
+ int len;
+ __be32 hdr;
+ u8 data[0];
+};
+
+struct flow_dissector_key_control {
+ u16 thoff;
+ u16 addr_type;
+ u32 flags;
+};
+
+struct flow_dissector_key_tags {
+ u32 flow_label;
+};
+
+struct flow_dissector_key_keyid {
+ __be32 keyid;
+};
+
+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_icmp {
+ struct {
+ u8 type;
+ u8 code;
+ };
+ u16 id;
+};
+
+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 ip6_fraglist_iter {
+ struct ipv6hdr *tmp_hdr;
+ struct sk_buff *frag;
+ int offset;
+ unsigned int hlen;
+ __be32 frag_id;
+ u8 nexthdr;
+};
+
+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_rt_info {
+ struct in6_addr daddr;
+ struct in6_addr saddr;
+ u_int32_t mark;
+};
+
+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 *);
+};
+
+struct nf_queue_entry {
+ struct list_head list;
+ struct sk_buff *skb;
+ unsigned int id;
+ unsigned int hook_index;
+ struct net_device *physin;
+ struct net_device *physout;
+ struct nf_hook_state state;
+ u16 size;
+};
+
+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;
+ u8 vlan_filtered: 1;
+ u8 br_netfilter_broute: 1;
+ u32 backup_nhid;
+};
+
+struct nf_bridge_frag_data;
+
+typedef __be32 rpc_fraghdr;
+
+struct xdr_skb_reader {
+ struct sk_buff *skb;
+ unsigned int offset;
+ size_t count;
+ __wsum csum;
+};
+
+typedef size_t (*xdr_skb_read_actor)(struct xdr_skb_reader *, void *, size_t);
+
+struct svc_info {
+ struct svc_serv *serv;
+ struct mutex *mutex;
+};
+
+struct svc_xpt_user {
+ struct list_head list;
+ void (*callback)(struct svc_xpt_user *);
+};
+
+enum {
+ XPT_BUSY = 0,
+ XPT_CONN = 1,
+ XPT_CLOSE = 2,
+ XPT_DATA = 3,
+ XPT_TEMP = 4,
+ XPT_DEAD = 5,
+ XPT_CHNGBUF = 6,
+ XPT_DEFERRED = 7,
+ XPT_OLD = 8,
+ XPT_LISTENER = 9,
+ XPT_CACHE_AUTH = 10,
+ XPT_LOCAL = 11,
+ XPT_KILL_TEMP = 12,
+ XPT_CONG_CTRL = 13,
+ XPT_HANDSHAKE = 14,
+ XPT_TLS_SESSION = 15,
+ XPT_PEER_AUTH = 16,
+};
+
+struct errormap {
+ char *name;
+ int val;
+ int namelen;
+ struct hlist_node list;
+};
+
+enum {
+ TLS_RECORD_TYPE_CHANGE_CIPHER_SPEC = 20,
+ TLS_RECORD_TYPE_ALERT = 21,
+ TLS_RECORD_TYPE_HANDSHAKE = 22,
+ TLS_RECORD_TYPE_DATA = 23,
+ TLS_RECORD_TYPE_HEARTBEAT = 24,
+ TLS_RECORD_TYPE_TLS12_CID = 25,
+ TLS_RECORD_TYPE_ACK = 26,
+};
+
+typedef struct elf32_phdr Elf32_Phdr;
+
+typedef struct elf64_phdr Elf64_Phdr;
+
+typedef struct elf32_note Elf32_Nhdr;
+
+struct freader {
+ void *buf;
+ u32 buf_sz;
+ int err;
+ union {
+ struct {
+ struct file *file;
+ struct folio *folio;
+ void *addr;
+ loff_t folio_off;
+ bool may_fault;
+ };
+ struct {
+ const char *data;
+ u64 data_sz;
+ };
+ };
+};
+
+typedef struct {
+ unsigned char op;
+ unsigned char bits;
+ short unsigned int val;
+} code;
+
+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;
+
+struct inflate_state {
+ inflate_mode mode;
+ int last;
+ int wrap;
+ int havedict;
+ int flags;
+ unsigned int dmax;
+ long unsigned int check;
+ long unsigned int total;
+ unsigned int wbits;
+ unsigned int wsize;
+ unsigned int whave;
+ unsigned int write;
+ unsigned char *window;
+ long unsigned int 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;
+ short unsigned int lens[320];
+ short unsigned int work[288];
+ code codes[2048];
+};
+
+struct inflate_workspace {
+ struct inflate_state inflate_state;
+ unsigned char working_window[32768];
+};
+
+enum {
+ PROC_ROOT_INO = 1,
+ PROC_IPC_INIT_INO = 4026531839,
+ PROC_UTS_INIT_INO = 4026531838,
+ PROC_USER_INIT_INO = 4026531837,
+ PROC_PID_INIT_INO = 4026531836,
+ PROC_CGROUP_INIT_INO = 4026531835,
+ PROC_TIME_INIT_INO = 4026531834,
+};
+
+enum ipi_message_type {
+ IPI_RESCHEDULE = 0,
+ IPI_CALL_FUNC = 1,
+ IPI_CPU_STOP = 2,
+ IPI_CPU_CRASH_STOP = 3,
+ IPI_IRQ_WORK = 4,
+ IPI_TIMER = 5,
+ IPI_CPU_BACKTRACE = 6,
+ IPI_KGDB_ROUNDUP = 7,
+ IPI_MAX = 8,
+};
+
+struct softirq_action {
+ void (*action)();
+};
+
+enum {
+ TASKLET_STATE_SCHED = 0,
+ TASKLET_STATE_RUN = 1,
+};
+
+struct tasklet_head {
+ struct tasklet_struct *head;
+ struct tasklet_struct **tail;
+};
+
+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 rlimit64 {
+ __u64 rlim_cur;
+ __u64 rlim_max;
+};
+
+typedef int (*proc_visitor)(struct task_struct *, void *);
+
+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 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;
+};
+
+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 getcpu_cache {
+ long unsigned int blob[16];
+};
+
+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];
+};
+
+enum die_val {
+ DIE_UNUSED = 0,
+ DIE_TRAP = 1,
+ DIE_OOPS = 2,
+};
+
+struct die_args {
+ struct pt_regs *regs;
+ const char *str;
+ long int err;
+ int trapnr;
+ int signr;
+};
+
+enum rwsem_waiter_type {
+ RWSEM_WAITING_FOR_WRITE = 0,
+ RWSEM_WAITING_FOR_READ = 1,
+};
+
+struct rwsem_waiter {
+ struct list_head list;
+ struct task_struct *task;
+ enum rwsem_waiter_type type;
+ long unsigned int timeout;
+ bool handoff_set;
+};
+
+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 optimistic_spin_node {
+ struct optimistic_spin_node *next;
+ struct optimistic_spin_node *prev;
+ int locked;
+ int cpu;
+};
+
+struct rt_waiter_node {
+ struct rb_node entry;
+ int prio;
+ u64 deadline;
+};
+
+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_wake_q_head {
+ struct wake_q_head head;
+ struct task_struct *rtlock_task;
+};
+
+enum rtmutex_chainwalk {
+ RT_MUTEX_MIN_CHAINWALK = 0,
+ RT_MUTEX_FULL_CHAINWALK = 1,
+};
+
+enum {
+ IRQ_STARTUP_NORMAL = 0,
+ IRQ_STARTUP_MANAGED = 1,
+ IRQ_STARTUP_ABORT = 2,
+};
+
+typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
+
+struct rcu_gp_oldstate {
+ long unsigned int rgos_norm;
+ long unsigned int rgos_exp;
+};
+
+struct swait_queue {
+ struct task_struct *task;
+ struct list_head task_list;
+};
+
+struct rcu_synchronize {
+ struct callback_head head;
+ struct completion completion;
+};
+
+struct rcu_cblist {
+ struct callback_head *head;
+ struct callback_head **tail;
+ long int len;
+};
+
+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 sysrq_key_op {
+ void (* const handler)(u8);
+ const char * const help_msg;
+ const char * const action_msg;
+ const int enable_mask;
+};
+
+struct rcu_exp_work {
+ long unsigned int rew_s;
+ struct kthread_work rew_work;
+};
+
+struct rcu_node {
+ raw_spinlock_t lock;
+ long unsigned int gp_seq;
+ long unsigned int gp_seq_needed;
+ long unsigned int completedqs;
+ long unsigned int qsmask;
+ long unsigned int rcu_gp_init_mask;
+ long unsigned int qsmaskinit;
+ long unsigned int qsmaskinitnext;
+ long unsigned int expmask;
+ long unsigned int expmaskinit;
+ long unsigned int expmaskinitnext;
+ struct kthread_worker *exp_kworker;
+ long unsigned int cbovldmask;
+ long unsigned int ffmask;
+ long unsigned int 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;
+ long unsigned int boost_time;
+ struct mutex kthread_mutex;
+ struct task_struct *boost_kthread_task;
+ unsigned int boost_kthread_status;
+ long unsigned int n_boosts;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ raw_spinlock_t fqslock;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ spinlock_t exp_lock;
+ long unsigned int 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;
+ long unsigned int exp_seq_poll_rq;
+ struct work_struct exp_poll_wq;
+ long: 64;
+};
+
+union rcu_noqs {
+ struct {
+ u8 norm;
+ u8 exp;
+ } b;
+ u16 s;
+};
+
+struct rcu_snap_record {
+ long unsigned int gp_seq;
+ u64 cputime_irq;
+ u64 cputime_softirq;
+ u64 cputime_system;
+ long unsigned int nr_hardirqs;
+ unsigned int nr_softirqs;
+ long long unsigned int nr_csw;
+ long unsigned int jiffies;
+};
+
+struct rcu_data {
+ long unsigned int gp_seq;
+ long unsigned int gp_seq_needed;
+ union rcu_noqs cpu_no_qs;
+ bool core_needs_qs;
+ bool beenonline;
+ bool gpwrap;
+ bool cpu_started;
+ struct rcu_node *mynode;
+ long unsigned int grpmask;
+ long unsigned int ticks_this_gp;
+ struct irq_work defer_qs_iw;
+ bool defer_qs_iw_pending;
+ struct work_struct strict_work;
+ struct rcu_segcblist cblist;
+ long int qlen_last_fqs_check;
+ long unsigned int n_cbs_invoked;
+ long unsigned int n_force_qs_snap;
+ long int blimit;
+ int watching_snap;
+ bool rcu_need_heavy_qs;
+ bool rcu_urgent_qs;
+ bool rcu_forced_tick;
+ bool rcu_forced_tick_exp;
+ long unsigned int barrier_seq_snap;
+ struct callback_head barrier_head;
+ int exp_watching_snap;
+ struct task_struct *rcu_cpu_kthread_task;
+ unsigned int rcu_cpu_kthread_status;
+ char rcu_cpu_has_work;
+ long unsigned int rcuc_activity;
+ unsigned int softirq_snap;
+ struct irq_work rcu_iw;
+ bool rcu_iw_pending;
+ long unsigned int rcu_iw_gp_seq;
+ long unsigned int rcu_ofl_gp_seq;
+ short int rcu_ofl_gp_state;
+ long unsigned int rcu_onl_gp_seq;
+ short int rcu_onl_gp_state;
+ long unsigned int last_fqs_resched;
+ long unsigned int last_sched_clock;
+ struct rcu_snap_record snap_record;
+ long int lazy_len;
+ int cpu;
+};
+
+struct sr_wait_node {
+ atomic_t inuse;
+ struct llist_node node;
+};
+
+struct rcu_state {
+ struct rcu_node node[5];
+ struct rcu_node *level[3];
+ int ncpus;
+ int n_online_cpus;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long unsigned int gp_seq;
+ long unsigned int gp_max;
+ struct task_struct *gp_kthread;
+ struct swait_queue_head gp_wq;
+ short int gp_flags;
+ short int gp_state;
+ long unsigned int gp_wake_time;
+ long unsigned int gp_wake_seq;
+ long unsigned int gp_seq_polled;
+ long unsigned int gp_seq_polled_snap;
+ long unsigned int gp_seq_polled_exp_snap;
+ struct mutex barrier_mutex;
+ atomic_t barrier_cpu_count;
+ struct completion barrier_completion;
+ long unsigned int barrier_sequence;
+ raw_spinlock_t barrier_lock;
+ struct mutex exp_mutex;
+ struct mutex exp_wake_mutex;
+ long unsigned int expedited_sequence;
+ atomic_t expedited_need_qs;
+ struct swait_queue_head expedited_wq;
+ int ncpus_snap;
+ u8 cbovld;
+ u8 cbovldnext;
+ long unsigned int jiffies_force_qs;
+ long unsigned int jiffies_kick_kthreads;
+ long unsigned int n_force_qs;
+ long unsigned int gp_start;
+ long unsigned int gp_end;
+ long unsigned int gp_activity;
+ long unsigned int gp_req_activity;
+ long unsigned int jiffies_stall;
+ int nr_fqs_jiffies_stall;
+ long unsigned int jiffies_resched;
+ long unsigned int n_force_qs_gpstart;
+ const char *name;
+ char abbr;
+ long: 64;
+ long: 64;
+ arch_spinlock_t ofl_lock;
+ struct llist_head srs_next;
+ struct llist_node *srs_wait_tail;
+ struct llist_node *srs_done_tail;
+ struct sr_wait_node srs_wait_nodes[5];
+ struct work_struct srs_cleanup_work;
+ atomic_t srs_cleanups_pending;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct kvfree_rcu_bulk_data {
+ struct list_head list;
+ struct rcu_gp_oldstate gp_snap;
+ long unsigned int nr_records;
+ void *records[0];
+};
+
+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;
+ long unsigned int 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;
+};
+
+typedef __kernel_long_t __kernel_suseconds_t;
+
+typedef __kernel_suseconds_t suseconds_t;
+
+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;
+};
+
+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 class_interface {
+ struct list_head node;
+ const struct class *class;
+ int (*add_dev)(struct device *);
+ void (*remove_dev)(struct device *);
+};
+
+struct alarm_base {
+ spinlock_t lock;
+ struct timerqueue_head timerqueue;
+ ktime_t (*get_ktime)();
+ void (*get_timespec)(struct timespec64 *);
+ clockid_t base_clockid;
+};
+
+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 cpu_vfs_cap_data {
+ __u32 magic_etc;
+ kuid_t rootid;
+ kernel_cap_t permitted;
+ kernel_cap_t inheritable;
+};
+
+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;
+};
+
+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_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 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 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_nfcfgop_tab {
+ enum audit_nfcfgop op;
+ const char *s;
+};
+
+struct action_cache {
+ long unsigned int allow_native[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 seccomp_metadata {
+ __u64 filter_off;
+ __u64 flags;
+};
+
+struct seccomp_notif_sizes {
+ __u16 seccomp_notif;
+ __u16 seccomp_notif_resp;
+ __u16 seccomp_data;
+};
+
+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 sock_fprog {
+ short unsigned int len;
+ struct sock_filter *filter;
+};
+
+struct compat_sock_fprog {
+ u16 len;
+ compat_uptr_t filter;
+};
+
+typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
+
+enum notify_state {
+ SECCOMP_NOTIFY_INIT = 0,
+ SECCOMP_NOTIFY_SENT = 1,
+ SECCOMP_NOTIFY_REPLIED = 2,
+};
+
+struct seccomp_knotif {
+ struct task_struct *task;
+ u64 id;
+ const struct seccomp_data *data;
+ enum notify_state state;
+ int error;
+ long int val;
+ u32 flags;
+ struct completion ready;
+ struct list_head list;
+ struct list_head addfd;
+};
+
+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 notification {
+ atomic_t requests;
+ u32 flags;
+ u64 next_id;
+ struct list_head notifications;
+};
+
+struct seccomp_log_name {
+ u32 log;
+ const char *name;
+};
+
+struct bpf_iter_num {
+ __u64 __opaque[1];
+};
+
+enum {
+ BPF_MAX_LOOPS = 8388608,
+};
+
+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 bpf_iter_num_kern {
+ int cur;
+ int end;
+};
+
+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 bpf_lru_node {
+ struct list_head list;
+ u16 cpu;
+ u8 type;
+ u8 ref;
+};
+
+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;
+};
+
+struct bpf_lru_locallist {
+ struct list_head lists[2];
+ u16 next_steal;
+ raw_spinlock_t lock;
+};
+
+struct bpf_common_lru {
+ struct bpf_lru_list lru_list;
+ struct bpf_lru_locallist *local_list;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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 *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;
+};
+
+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,
+};
+
+enum {
+ BPF_RINGBUF_BUSY_BIT = 2147483648,
+ BPF_RINGBUF_DISCARD_BIT = 1073741824,
+ BPF_RINGBUF_HDR_SZ = 8,
+};
+
+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;
+ raw_spinlock_t spinlock;
+ 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;
+ long unsigned int 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;
+ long unsigned int producer_pos;
+ long unsigned int pending_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;
+ char data[0];
+};
+
+struct bpf_ringbuf_map {
+ struct bpf_map map;
+ struct bpf_ringbuf *rb;
+};
+
+struct bpf_ringbuf_hdr {
+ u32 len;
+ u32 pg_off;
+};
+
+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);
+
+enum {
+ BPF_F_INGRESS = 1,
+ BPF_F_BROADCAST = 8,
+ BPF_F_EXCLUDE_INGRESS = 16,
+};
+
+struct bpf_devmap_val {
+ __u32 ifindex;
+ union {
+ int fd;
+ __u32 id;
+ } bpf_prog;
+};
+
+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,
+};
+
+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 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;
+};
+
+struct bpf_dtab {
+ struct bpf_map map;
+ struct bpf_dtab_netdev **netdev_map;
+ struct list_head list;
+ struct hlist_head *dev_index_head;
+ spinlock_t index_lock;
+ unsigned int items;
+ u32 n_buckets;
+};
+
+enum btf_field_iter_kind {
+ BTF_FIELD_ITER_IDS = 0,
+ BTF_FIELD_ITER_STRS = 1,
+};
+
+struct btf_field_desc {
+ int t_off_cnt;
+ int t_offs[2];
+ int m_sz;
+ int m_off_cnt;
+ int m_offs[1];
+};
+
+struct btf_field_iter {
+ struct btf_field_desc desc;
+ void *p;
+ int m_idx;
+ int off_idx;
+ int vlen;
+};
+
+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,
+};
+
+struct perf_callchain_entry_ctx {
+ struct perf_callchain_entry *entry;
+ u32 max_stack;
+ u32 nr;
+ short int contexts;
+ bool contexts_maxed;
+};
+
+struct callchain_cpus_entries {
+ struct callback_head callback_head;
+ struct perf_callchain_entry *cpu_entries[0];
+};
+
+enum lruvec_flags {
+ LRUVEC_CGROUP_CONGESTED = 0,
+ LRUVEC_NODE_CONGESTED = 1,
+};
+
+enum pgdat_flags {
+ PGDAT_DIRTY = 0,
+ PGDAT_WRITEBACK = 1,
+ PGDAT_RECLAIM_LOCKED = 2,
+};
+
+enum zone_flags {
+ ZONE_BOOSTED_WATERMARK = 0,
+ ZONE_RECLAIM_ACTIVE = 1,
+ ZONE_BELOW_HIGH = 2,
+};
+
+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;
+ unsigned int nr_demoted;
+};
+
+struct scan_control {
+ long unsigned int nr_to_reclaim;
+ nodemask_t *nodemask;
+ struct mem_cgroup *target_mem_cgroup;
+ long unsigned int anon_cost;
+ long unsigned int file_cost;
+ int *proactive_swappiness;
+ 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 no_cache_trim_mode: 1;
+ unsigned int cache_trim_mode_failed: 1;
+ unsigned int proactive: 1;
+ unsigned int memcg_low_reclaim: 1;
+ unsigned int memcg_low_skipped: 1;
+ unsigned int memcg_full_walk: 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;
+ long unsigned int nr_scanned;
+ long unsigned int 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;
+};
+
+typedef enum {
+ PAGE_KEEP = 0,
+ PAGE_ACTIVATE = 1,
+ PAGE_SUCCESS = 2,
+ PAGE_CLEAN = 3,
+} pageout_t;
+
+enum folio_references {
+ FOLIOREF_RECLAIM = 0,
+ FOLIOREF_RECLAIM_CLEAN = 1,
+ FOLIOREF_KEEP = 2,
+ FOLIOREF_ACTIVATE = 3,
+};
+
+enum scan_balance {
+ SCAN_EQUAL = 0,
+ SCAN_FRACT = 1,
+ SCAN_ANON = 2,
+ SCAN_FILE = 3,
+};
+
+struct dma_block {
+ struct dma_block *next_block;
+ dma_addr_t dma;
+};
+
+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_page {
+ struct list_head page_list;
+ void *vaddr;
+ dma_addr_t dma;
+};
+
+struct pgtable_debug_args {
+ struct mm_struct *mm;
+ struct vm_area_struct *vma;
+ pgd_t *pgdp;
+ p4d_t *p4dp;
+ pud_t *pudp;
+ pmd_t *pmdp;
+ pte_t *ptep;
+ p4d_t *start_p4dp;
+ pud_t *start_pudp;
+ pmd_t *start_pmdp;
+ pgtable_t start_ptep;
+ long unsigned int vaddr;
+ pgprot_t page_prot;
+ pgprot_t page_prot_none;
+ bool is_contiguous_page;
+ long unsigned int pud_pfn;
+ long unsigned int pmd_pfn;
+ long unsigned int pte_pfn;
+ long unsigned int fixed_alignment;
+ long unsigned int fixed_pgd_pfn;
+ long unsigned int fixed_p4d_pfn;
+ long unsigned int fixed_pud_pfn;
+ long unsigned int fixed_pmd_pfn;
+ long unsigned int fixed_pte_pfn;
+};
+
+struct linux_dirent64 {
+ u64 d_ino;
+ s64 d_off;
+ short unsigned int d_reclen;
+ unsigned char d_type;
+ char d_name[0];
+};
+
+struct linux_dirent {
+ long unsigned int d_ino;
+ long unsigned int d_off;
+ short unsigned int d_reclen;
+ char d_name[0];
+};
+
+struct getdents_callback {
+ struct dir_context ctx;
+ struct linux_dirent *current_dir;
+ int prev_reclen;
+ int count;
+ int error;
+};
+
+struct getdents_callback64 {
+ struct dir_context ctx;
+ struct linux_dirent64 *current_dir;
+ int prev_reclen;
+ int count;
+ int error;
+};
+
+struct compat_old_linux_dirent {
+ compat_ulong_t d_ino;
+ compat_ulong_t d_offset;
+ short unsigned int d_namlen;
+ char d_name[0];
+};
+
+struct compat_readdir_callback {
+ struct dir_context ctx;
+ struct compat_old_linux_dirent *dirent;
+ int result;
+};
+
+struct compat_linux_dirent {
+ compat_ulong_t d_ino;
+ compat_ulong_t d_off;
+ short unsigned int d_reclen;
+ char d_name[0];
+};
+
+struct compat_getdents_callback {
+ struct dir_context ctx;
+ struct compat_linux_dirent *current_dir;
+ int prev_reclen;
+ int count;
+ int error;
+};
+
+struct prepend_buffer {
+ char *buf;
+ int len;
+};
+
+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 proc_mounts {
+ struct mnt_namespace *ns;
+ struct path root;
+ int (*show)(struct seq_file *, struct vfsmount *);
+};
+
+struct proc_fs_opts {
+ int flag;
+ const char *str;
+};
+
+struct epoll_event {
+ __poll_t events;
+ __u64 data;
+};
+
+struct epoll_params {
+ __u32 busy_poll_usecs;
+ __u16 busy_poll_budget;
+ __u8 prefer_busy_poll;
+ __u8 __pad;
+};
+
+struct epoll_filefd {
+ struct file *file;
+ int fd;
+} __attribute__((packed));
+
+struct epitem;
+
+struct eppoll_entry {
+ struct eppoll_entry *next;
+ struct epitem *base;
+ wait_queue_entry_t wait;
+ wait_queue_head_t *whead;
+};
+
+struct eventpoll;
+
+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 *ws;
+ struct epoll_event event;
+};
+
+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;
+ u32 busy_poll_usecs;
+ u16 busy_poll_budget;
+ bool prefer_busy_poll;
+};
+
+struct ep_pqueue {
+ poll_table pt;
+ struct epitem *epi;
+};
+
+struct epitems_head {
+ struct hlist_head epitems;
+ struct epitems_head *next;
+};
+
+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_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 sysctl_alias {
+ const char *kernel_param;
+ const char *sysctl_param;
+};
+
+enum fscache_want_state {
+ FSCACHE_WANT_PARAMS = 0,
+ FSCACHE_WANT_WRITE = 1,
+ FSCACHE_WANT_READ = 2,
+};
+
+enum fscache_cookie_state {
+ FSCACHE_COOKIE_STATE_QUIESCENT = 0,
+ FSCACHE_COOKIE_STATE_LOOKING_UP = 1,
+ FSCACHE_COOKIE_STATE_CREATING = 2,
+ FSCACHE_COOKIE_STATE_ACTIVE = 3,
+ FSCACHE_COOKIE_STATE_INVALIDATING = 4,
+ FSCACHE_COOKIE_STATE_FAILED = 5,
+ FSCACHE_COOKIE_STATE_LRU_DISCARDING = 6,
+ FSCACHE_COOKIE_STATE_WITHDRAWING = 7,
+ FSCACHE_COOKIE_STATE_RELINQUISHING = 8,
+ FSCACHE_COOKIE_STATE_DROPPED = 9,
+} __attribute__((mode(byte)));
+
+struct fscache_cache;
+
+struct fscache_volume {
+ refcount_t ref;
+ atomic_t n_cookies;
+ atomic_t n_accesses;
+ unsigned int debug_id;
+ unsigned int key_hash;
+ u8 *key;
+ struct list_head proc_link;
+ struct hlist_bl_node hash_link;
+ struct work_struct work;
+ struct fscache_cache *cache;
+ void *cache_priv;
+ spinlock_t lock;
+ long unsigned int flags;
+ u8 coherency_len;
+ u8 coherency[0];
+};
+
+enum fscache_cache_state {
+ FSCACHE_CACHE_IS_NOT_PRESENT = 0,
+ FSCACHE_CACHE_IS_PREPARING = 1,
+ FSCACHE_CACHE_IS_ACTIVE = 2,
+ FSCACHE_CACHE_GOT_IOERROR = 3,
+ FSCACHE_CACHE_IS_WITHDRAWN = 4,
+};
+
+struct fscache_cache_ops;
+
+struct fscache_cache {
+ const struct fscache_cache_ops *ops;
+ struct list_head cache_link;
+ void *cache_priv;
+ refcount_t ref;
+ atomic_t n_volumes;
+ atomic_t n_accesses;
+ atomic_t object_count;
+ unsigned int debug_id;
+ enum fscache_cache_state state;
+ char *name;
+};
+
+struct fscache_cookie {
+ refcount_t ref;
+ atomic_t n_active;
+ atomic_t n_accesses;
+ unsigned int debug_id;
+ unsigned int inval_counter;
+ spinlock_t lock;
+ struct fscache_volume *volume;
+ void *cache_priv;
+ struct hlist_bl_node hash_link;
+ struct list_head proc_link;
+ struct list_head commit_link;
+ struct work_struct work;
+ loff_t object_size;
+ long unsigned int unused_at;
+ long unsigned int flags;
+ enum fscache_cookie_state state;
+ u8 advice;
+ u8 key_len;
+ u8 aux_len;
+ u32 key_hash;
+ union {
+ void *key;
+ u8 inline_key[16];
+ };
+ union {
+ void *aux;
+ u8 inline_aux[8];
+ };
+};
+
+struct fscache_cache_ops {
+ const char *name;
+ void (*acquire_volume)(struct fscache_volume *);
+ void (*free_volume)(struct fscache_volume *);
+ bool (*lookup_cookie)(struct fscache_cookie *);
+ void (*withdraw_cookie)(struct fscache_cookie *);
+ void (*resize_cookie)(struct netfs_cache_resources *, loff_t);
+ bool (*invalidate_cookie)(struct fscache_cookie *);
+ bool (*begin_operation)(struct netfs_cache_resources *, enum fscache_want_state);
+ void (*prepare_to_write)(struct fscache_cookie *);
+};
+
+enum netfs_write_trace {
+ netfs_write_trace_copy_to_cache = 0,
+ netfs_write_trace_dio_write = 1,
+ netfs_write_trace_unbuffered_write = 2,
+ netfs_write_trace_writeback = 3,
+ netfs_write_trace_writethrough = 4,
+} __attribute__((mode(byte)));
+
+struct netfs_folio {
+ struct netfs_group *netfs_group;
+ unsigned int dirty_offset;
+ unsigned int dirty_len;
+};
+
+enum netfs_folio_trace {
+ netfs_folio_is_uptodate = 0,
+ netfs_just_prefetch = 1,
+ netfs_whole_folio_modify = 2,
+ netfs_modify_and_clear = 3,
+ netfs_streaming_write = 4,
+ netfs_streaming_write_cont = 5,
+ netfs_flush_content = 6,
+ netfs_streaming_filled_page = 7,
+ netfs_streaming_cont_filled_page = 8,
+ netfs_folio_trace_abandon = 9,
+ netfs_folio_trace_cancel_copy = 10,
+ netfs_folio_trace_cancel_store = 11,
+ netfs_folio_trace_clear = 12,
+ netfs_folio_trace_clear_cc = 13,
+ netfs_folio_trace_clear_g = 14,
+ netfs_folio_trace_clear_s = 15,
+ netfs_folio_trace_copy_to_cache = 16,
+ netfs_folio_trace_end_copy = 17,
+ netfs_folio_trace_filled_gaps = 18,
+ netfs_folio_trace_kill = 19,
+ netfs_folio_trace_kill_cc = 20,
+ netfs_folio_trace_kill_g = 21,
+ netfs_folio_trace_kill_s = 22,
+ netfs_folio_trace_mkwrite = 23,
+ netfs_folio_trace_mkwrite_plus = 24,
+ netfs_folio_trace_not_under_wback = 25,
+ netfs_folio_trace_put = 26,
+ netfs_folio_trace_read = 27,
+ netfs_folio_trace_read_done = 28,
+ netfs_folio_trace_read_gaps = 29,
+ netfs_folio_trace_read_unlock = 30,
+ netfs_folio_trace_redirtied = 31,
+ netfs_folio_trace_store = 32,
+ netfs_folio_trace_store_copy = 33,
+ netfs_folio_trace_store_plus = 34,
+ netfs_folio_trace_wthru = 35,
+ netfs_folio_trace_wthru_plus = 36,
+} __attribute__((mode(byte)));
+
+enum netfs_donate_trace {
+ netfs_trace_donate_tail_to_prev = 0,
+ netfs_trace_donate_to_prev = 1,
+ netfs_trace_donate_to_next = 2,
+ netfs_trace_donate_to_deferred_next = 3,
+} __attribute__((mode(byte)));
+
+enum utf8_normalization {
+ UTF8_NFDI = 0,
+ UTF8_NFDICF = 1,
+ UTF8_NMAX = 2,
+};
+
+struct fscrypt_str {
+ unsigned char *name;
+ u32 len;
+};
+
+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_SHA3_256 = 20,
+ HASH_ALGO_SHA3_384 = 21,
+ HASH_ALGO_SHA3_512 = 22,
+ HASH_ALGO__LAST = 23,
+};
+
+struct ext4_dir_entry_hash {
+ __le32 hash;
+ __le32 minor_hash;
+};
+
+struct ext4_dir_entry_2 {
+ __le32 inode;
+ __le16 rec_len;
+ __u8 name_len;
+ __u8 file_type;
+ char name[255];
+};
+
+struct fname;
+
+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;
+ u64 cookie;
+ bool initialized;
+};
+
+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];
+};
+
+typedef __kernel_mode_t mode_t;
+
+struct dx_hash_info {
+ u32 hash;
+ u32 minor_hash;
+ int hash_version;
+ u32 *seed;
+};
+
+struct orlov_stats {
+ __u64 free_clusters;
+ __u32 free_inodes;
+ __u32 used_dirs;
+};
+
+struct ext4_extent {
+ __le32 ee_block;
+ __le16 ee_len;
+ __le16 ee_start_hi;
+ __le32 ee_start_lo;
+};
+
+struct ext4_extent_idx {
+ __le32 ei_block;
+ __le32 ei_leaf_lo;
+ __le16 ei_leaf_hi;
+ __u16 ei_unused;
+};
+
+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_orphan_block_tail {
+ __le32 ob_magic;
+ __le32 ob_checksum;
+};
+
+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 iso_volume_descriptor {
+ __u8 type[1];
+ char id[5];
+ __u8 version[1];
+ __u8 data[2041];
+};
+
+struct iso_primary_descriptor {
+ __u8 type[1];
+ char id[5];
+ __u8 version[1];
+ __u8 unused1[1];
+ char system_id[32];
+ char volume_id[32];
+ __u8 unused2[8];
+ __u8 volume_space_size[8];
+ __u8 unused3[32];
+ __u8 volume_set_size[4];
+ __u8 volume_sequence_number[4];
+ __u8 logical_block_size[4];
+ __u8 path_table_size[8];
+ __u8 type_l_path_table[4];
+ __u8 opt_type_l_path_table[4];
+ __u8 type_m_path_table[4];
+ __u8 opt_type_m_path_table[4];
+ __u8 root_directory_record[34];
+ char volume_set_id[128];
+ char publisher_id[128];
+ char preparer_id[128];
+ char application_id[128];
+ char copyright_file_id[37];
+ char abstract_file_id[37];
+ char bibliographic_file_id[37];
+ __u8 creation_date[17];
+ __u8 modification_date[17];
+ __u8 expiration_date[17];
+ __u8 effective_date[17];
+ __u8 file_structure_version[1];
+ __u8 unused4[1];
+ __u8 application_data[512];
+ __u8 unused5[653];
+};
+
+struct iso_supplementary_descriptor {
+ __u8 type[1];
+ char id[5];
+ __u8 version[1];
+ __u8 flags[1];
+ char system_id[32];
+ char volume_id[32];
+ __u8 unused2[8];
+ __u8 volume_space_size[8];
+ __u8 escape[32];
+ __u8 volume_set_size[4];
+ __u8 volume_sequence_number[4];
+ __u8 logical_block_size[4];
+ __u8 path_table_size[8];
+ __u8 type_l_path_table[4];
+ __u8 opt_type_l_path_table[4];
+ __u8 type_m_path_table[4];
+ __u8 opt_type_m_path_table[4];
+ __u8 root_directory_record[34];
+ char volume_set_id[128];
+ char publisher_id[128];
+ char preparer_id[128];
+ char application_id[128];
+ char copyright_file_id[37];
+ char abstract_file_id[37];
+ char bibliographic_file_id[37];
+ __u8 creation_date[17];
+ __u8 modification_date[17];
+ __u8 expiration_date[17];
+ __u8 effective_date[17];
+ __u8 file_structure_version[1];
+ __u8 unused4[1];
+ __u8 application_data[512];
+ __u8 unused5[653];
+};
+
+struct hs_volume_descriptor {
+ __u8 foo[8];
+ __u8 type[1];
+ char id[5];
+ __u8 version[1];
+ __u8 data[2033];
+};
+
+struct hs_primary_descriptor {
+ __u8 foo[8];
+ __u8 type[1];
+ __u8 id[5];
+ __u8 version[1];
+ __u8 unused1[1];
+ char system_id[32];
+ char volume_id[32];
+ __u8 unused2[8];
+ __u8 volume_space_size[8];
+ __u8 unused3[32];
+ __u8 volume_set_size[4];
+ __u8 volume_sequence_number[4];
+ __u8 logical_block_size[4];
+ __u8 path_table_size[8];
+ __u8 type_l_path_table[4];
+ __u8 unused4[28];
+ __u8 root_directory_record[34];
+};
+
+enum isofs_file_format {
+ isofs_file_normal = 0,
+ isofs_file_sparse = 1,
+ isofs_file_compressed = 2,
+};
+
+struct isofs_sb_info {
+ long unsigned int s_ninodes;
+ long unsigned int s_nzones;
+ long unsigned int s_firstdatazone;
+ long unsigned int s_log_zone_size;
+ long unsigned int s_max_size;
+ int s_rock_offset;
+ s32 s_sbsector;
+ unsigned char s_joliet_level;
+ unsigned char s_mapping;
+ unsigned char s_check;
+ unsigned char s_session;
+ unsigned int s_high_sierra: 1;
+ unsigned int s_rock: 2;
+ unsigned int s_cruft: 1;
+ unsigned int s_nocompress: 1;
+ unsigned int s_hide: 1;
+ unsigned int s_showassoc: 1;
+ unsigned int s_overriderockperm: 1;
+ unsigned int s_uid_set: 1;
+ unsigned int s_gid_set: 1;
+ umode_t s_fmode;
+ umode_t s_dmode;
+ kgid_t s_gid;
+ kuid_t s_uid;
+ struct nls_table *s_nls_iocharset;
+};
+
+struct isofs_options {
+ unsigned int rock: 1;
+ unsigned int joliet: 1;
+ unsigned int cruft: 1;
+ unsigned int hide: 1;
+ unsigned int showassoc: 1;
+ unsigned int nocompress: 1;
+ unsigned int overriderockperm: 1;
+ unsigned int uid_set: 1;
+ unsigned int gid_set: 1;
+ unsigned char map;
+ unsigned char check;
+ unsigned int blocksize;
+ umode_t fmode;
+ umode_t dmode;
+ kgid_t gid;
+ kuid_t uid;
+ char *iocharset;
+ s32 session;
+ s32 sbsector;
+};
+
+enum {
+ Opt_block = 0,
+ Opt_check = 1,
+ Opt_cruft = 2,
+ Opt_gid___3 = 3,
+ Opt_ignore___2 = 4,
+ Opt_iocharset = 5,
+ Opt_map = 6,
+ Opt_mode___2 = 7,
+ Opt_nojoliet = 8,
+ Opt_norock = 9,
+ Opt_sb = 10,
+ Opt_session = 11,
+ Opt_uid___3 = 12,
+ Opt_unhide = 13,
+ Opt_utf8 = 14,
+ Opt_err___2 = 15,
+ Opt_nocompress = 16,
+ Opt_hide = 17,
+ Opt_showassoc = 18,
+ Opt_dmode = 19,
+ Opt_overriderockperm = 20,
+};
+
+struct isofs_iget5_callback_data {
+ long unsigned int block;
+ long unsigned int offset;
+};
+
+struct nfs_ssc_client_ops {
+ void (*sco_sb_deactive)(struct super_block *);
+};
+
+struct nfs_mount_request {
+ struct __kernel_sockaddr_storage *sap;
+ size_t salen;
+ char *hostname;
+ char *dirpath;
+ u32 version;
+ short unsigned int protocol;
+ struct nfs_fh *fh;
+ int noresvport;
+ unsigned int *auth_flav_len;
+ rpc_authflavor_t *auth_flavs;
+ struct net *net;
+};
+
+struct proc_nfs_info {
+ int flag;
+ const char *str;
+ const char *nostr;
+};
+
+enum nfs_ftype4 {
+ NF4BAD = 0,
+ NF4REG = 1,
+ NF4DIR = 2,
+ NF4BLK = 3,
+ NF4CHR = 4,
+ NF4LNK = 5,
+ NF4SOCK = 6,
+ NF4FIFO = 7,
+ NF4ATTRDIR = 8,
+ NF4NAMEDATTR = 9,
+};
+
+enum open_claim_type4 {
+ NFS4_OPEN_CLAIM_NULL = 0,
+ NFS4_OPEN_CLAIM_PREVIOUS = 1,
+ NFS4_OPEN_CLAIM_DELEGATE_CUR = 2,
+ NFS4_OPEN_CLAIM_DELEGATE_PREV = 3,
+ NFS4_OPEN_CLAIM_FH = 4,
+ NFS4_OPEN_CLAIM_DELEG_CUR_FH = 5,
+ NFS4_OPEN_CLAIM_DELEG_PREV_FH = 6,
+};
+
+enum createmode4 {
+ NFS4_CREATE_UNCHECKED = 0,
+ NFS4_CREATE_GUARDED = 1,
+ NFS4_CREATE_EXCLUSIVE = 2,
+ NFS4_CREATE_EXCLUSIVE4_1 = 3,
+};
+
+enum open_delegation_type4 {
+ NFS4_OPEN_DELEGATE_NONE = 0,
+ NFS4_OPEN_DELEGATE_READ = 1,
+ NFS4_OPEN_DELEGATE_WRITE = 2,
+ NFS4_OPEN_DELEGATE_NONE_EXT = 3,
+ NFS4_OPEN_DELEGATE_READ_ATTRS_DELEG = 4,
+ NFS4_OPEN_DELEGATE_WRITE_ATTRS_DELEG = 5,
+};
+
+enum {
+ FATTR4_DIR_NOTIF_DELAY = 56,
+ FATTR4_DIRENT_NOTIF_DELAY = 57,
+ FATTR4_DACL = 58,
+ FATTR4_SACL = 59,
+ FATTR4_CHANGE_POLICY = 60,
+ FATTR4_FS_STATUS = 61,
+ FATTR4_FS_LAYOUT_TYPES = 62,
+ FATTR4_LAYOUT_HINT = 63,
+ FATTR4_LAYOUT_TYPES = 64,
+ FATTR4_LAYOUT_BLKSIZE = 65,
+ FATTR4_LAYOUT_ALIGNMENT = 66,
+ FATTR4_FS_LOCATIONS_INFO = 67,
+ FATTR4_MDSTHRESHOLD = 68,
+ FATTR4_RETENTION_GET = 69,
+ FATTR4_RETENTION_SET = 70,
+ FATTR4_RETENTEVT_GET = 71,
+ FATTR4_RETENTEVT_SET = 72,
+ FATTR4_RETENTION_HOLD = 73,
+ FATTR4_MODE_SET_MASKED = 74,
+ FATTR4_SUPPATTR_EXCLCREAT = 75,
+ FATTR4_FS_CHARSET_CAP = 76,
+};
+
+enum {
+ FATTR4_CLONE_BLKSIZE = 77,
+ FATTR4_SPACE_FREED = 78,
+ FATTR4_CHANGE_ATTR_TYPE = 79,
+ FATTR4_SEC_LABEL = 80,
+};
+
+enum {
+ FATTR4_MODE_UMASK = 81,
+};
+
+enum {
+ FATTR4_XATTR_SUPPORT = 82,
+};
+
+enum state_protect_how4 {
+ SP4_NONE = 0,
+ SP4_MACH_CRED = 1,
+ SP4_SSV = 2,
+};
+
+struct nfs4_op_map {
+ union {
+ long unsigned int longs[2];
+ u32 words[4];
+ } u;
+};
+
+struct nfs4_get_lease_time_args {
+ struct nfs4_sequence_args la_seq_args;
+};
+
+struct nfs4_get_lease_time_res {
+ struct nfs4_sequence_res lr_seq_res;
+ struct nfs_fsinfo *lr_fsinfo;
+};
+
+struct nfs4_layoutget_args {
+ struct nfs4_sequence_args seq_args;
+ __u32 type;
+ struct pnfs_layout_range range;
+ __u64 minlength;
+ __u32 maxcount;
+ struct inode *inode;
+ struct nfs_open_context *ctx;
+ nfs4_stateid stateid;
+ struct nfs4_layoutdriver_data layout;
+};
+
+struct nfs4_layoutget {
+ struct nfs4_layoutget_args args;
+ struct nfs4_layoutget_res res;
+ const struct cred *cred;
+ struct pnfs_layout_hdr *lo;
+ gfp_t gfp_flags;
+};
+
+struct nfs4_getdeviceinfo_args {
+ struct nfs4_sequence_args seq_args;
+ struct pnfs_device *pdev;
+ __u32 notify_types;
+};
+
+struct nfs4_getdeviceinfo_res {
+ struct nfs4_sequence_res seq_res;
+ struct pnfs_device *pdev;
+ __u32 notification;
+};
+
+struct nfs4_layoutreturn_res {
+ struct nfs4_sequence_res seq_res;
+ u32 lrs_present;
+ nfs4_stateid stateid;
+};
+
+struct nfs4_layoutreturn {
+ struct nfs4_layoutreturn_args args;
+ struct nfs4_layoutreturn_res res;
+ const struct cred *cred;
+ struct nfs_client *clp;
+ struct inode *inode;
+ int rpc_status;
+ struct nfs4_xdr_opaque_data ld_private;
+};
+
+struct stateowner_id {
+ __u64 create_time;
+ __u64 uniquifier;
+};
+
+struct nfs4_open_delegation {
+ __u32 open_delegation_type;
+ union {
+ struct {
+ fmode_t type;
+ __u32 do_recall;
+ nfs4_stateid stateid;
+ long unsigned int pagemod_limit;
+ };
+ struct {
+ __u32 why_no_delegation;
+ __u32 will_notify;
+ };
+ };
+};
+
+struct nfs_openargs {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ struct nfs_seqid *seqid;
+ int open_flags;
+ fmode_t fmode;
+ u32 share_access;
+ u32 access;
+ __u64 clientid;
+ struct stateowner_id id;
+ union {
+ struct {
+ struct iattr *attrs;
+ nfs4_verifier verifier;
+ };
+ nfs4_stateid delegation;
+ __u32 delegation_type;
+ } u;
+ const struct qstr *name;
+ const struct nfs_server *server;
+ const u32 *bitmask;
+ const u32 *open_bitmap;
+ enum open_claim_type4 claim;
+ enum createmode4 createmode;
+ const struct nfs4_label *label;
+ umode_t umask;
+ struct nfs4_layoutget_args *lg_args;
+};
+
+struct nfs_openres {
+ struct nfs4_sequence_res seq_res;
+ nfs4_stateid stateid;
+ struct nfs_fh fh;
+ struct nfs4_change_info cinfo;
+ __u32 rflags;
+ struct nfs_fattr *f_attr;
+ struct nfs_seqid *seqid;
+ const struct nfs_server *server;
+ __u32 attrset[3];
+ struct nfs4_string *owner;
+ struct nfs4_string *group_owner;
+ struct nfs4_open_delegation delegation;
+ __u32 access_request;
+ __u32 access_supported;
+ __u32 access_result;
+ struct nfs4_layoutget_res *lg_res;
+};
+
+struct nfs_open_confirmargs {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ nfs4_stateid *stateid;
+ struct nfs_seqid *seqid;
+};
+
+struct nfs_open_confirmres {
+ struct nfs4_sequence_res seq_res;
+ nfs4_stateid stateid;
+ struct nfs_seqid *seqid;
+};
+
+struct nfs_closeargs {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ nfs4_stateid stateid;
+ struct nfs_seqid *seqid;
+ fmode_t fmode;
+ u32 share_access;
+ const u32 *bitmask;
+ u32 bitmask_store[3];
+ struct nfs4_layoutreturn_args *lr_args;
+};
+
+struct nfs_closeres {
+ struct nfs4_sequence_res seq_res;
+ nfs4_stateid stateid;
+ struct nfs_fattr *fattr;
+ struct nfs_seqid *seqid;
+ const struct nfs_server *server;
+ struct nfs4_layoutreturn_res *lr_res;
+ int lr_ret;
+};
+
+struct nfs_lock_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ struct file_lock *fl;
+ struct nfs_seqid *lock_seqid;
+ nfs4_stateid lock_stateid;
+ struct nfs_seqid *open_seqid;
+ nfs4_stateid open_stateid;
+ struct nfs_lowner lock_owner;
+ unsigned char block: 1;
+ unsigned char reclaim: 1;
+ unsigned char new_lock: 1;
+ unsigned char new_lock_owner: 1;
+};
+
+struct nfs_lock_res {
+ struct nfs4_sequence_res seq_res;
+ nfs4_stateid stateid;
+ struct nfs_seqid *lock_seqid;
+ struct nfs_seqid *open_seqid;
+};
+
+struct nfs_locku_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ struct file_lock *fl;
+ struct nfs_seqid *seqid;
+ nfs4_stateid stateid;
+};
+
+struct nfs_locku_res {
+ struct nfs4_sequence_res seq_res;
+ nfs4_stateid stateid;
+ struct nfs_seqid *seqid;
+};
+
+struct nfs_lockt_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ struct file_lock *fl;
+ struct nfs_lowner lock_owner;
+};
+
+struct nfs_lockt_res {
+ struct nfs4_sequence_res seq_res;
+ struct file_lock *denied;
+};
+
+struct nfs_release_lockowner_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_lowner lock_owner;
+};
+
+struct nfs_release_lockowner_res {
+ struct nfs4_sequence_res seq_res;
+};
+
+struct nfs4_delegattr {
+ struct timespec64 atime;
+ struct timespec64 mtime;
+ bool atime_set;
+ bool mtime_set;
+};
+
+struct nfs4_delegreturnargs {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fhandle;
+ const nfs4_stateid *stateid;
+ const u32 *bitmask;
+ u32 bitmask_store[3];
+ struct nfs4_layoutreturn_args *lr_args;
+ struct nfs4_delegattr *sattr_args;
+};
+
+struct nfs4_delegreturnres {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_fattr *fattr;
+ struct nfs_server *server;
+ struct nfs4_layoutreturn_res *lr_res;
+ int lr_ret;
+ bool sattr_res;
+ int sattr_ret;
+};
+
+struct nfs_setattrargs {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ nfs4_stateid stateid;
+ struct iattr *iap;
+ const struct nfs_server *server;
+ const u32 *bitmask;
+ const struct nfs4_label *label;
+};
+
+enum nfs4_acl_type {
+ NFS4ACL_NONE = 0,
+ NFS4ACL_ACL = 1,
+ NFS4ACL_DACL = 2,
+ NFS4ACL_SACL = 3,
+};
+
+struct nfs_setaclargs {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ enum nfs4_acl_type acl_type;
+ size_t acl_len;
+ struct page **acl_pages;
+};
+
+struct nfs_setaclres {
+ struct nfs4_sequence_res seq_res;
+};
+
+struct nfs_getaclargs {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ enum nfs4_acl_type acl_type;
+ size_t acl_len;
+ struct page **acl_pages;
+};
+
+struct nfs_getaclres {
+ struct nfs4_sequence_res seq_res;
+ enum nfs4_acl_type acl_type;
+ size_t acl_len;
+ size_t acl_data_offset;
+ int acl_flags;
+ struct page *acl_scratch;
+};
+
+struct nfs_setattrres {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_fattr *fattr;
+ const struct nfs_server *server;
+};
+
+typedef u64 clientid4;
+
+struct nfs4_accessargs {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ const u32 *bitmask;
+ u32 access;
+};
+
+struct nfs4_accessres {
+ struct nfs4_sequence_res seq_res;
+ const struct nfs_server *server;
+ struct nfs_fattr *fattr;
+ u32 supported;
+ u32 access;
+};
+
+struct nfs4_create_arg {
+ struct nfs4_sequence_args seq_args;
+ u32 ftype;
+ union {
+ struct {
+ struct page **pages;
+ unsigned int len;
+ } symlink;
+ struct {
+ u32 specdata1;
+ u32 specdata2;
+ } device;
+ } u;
+ const struct qstr *name;
+ const struct nfs_server *server;
+ const struct iattr *attrs;
+ const struct nfs_fh *dir_fh;
+ const u32 *bitmask;
+ const struct nfs4_label *label;
+ umode_t umask;
+};
+
+struct nfs4_create_res {
+ struct nfs4_sequence_res seq_res;
+ const struct nfs_server *server;
+ struct nfs_fh *fh;
+ struct nfs_fattr *fattr;
+ struct nfs4_change_info dir_cinfo;
+};
+
+struct nfs4_fsinfo_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ const u32 *bitmask;
+};
+
+struct nfs4_fsinfo_res {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_fsinfo *fsinfo;
+};
+
+struct nfs4_getattr_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ const u32 *bitmask;
+};
+
+struct nfs4_getattr_res {
+ struct nfs4_sequence_res seq_res;
+ const struct nfs_server *server;
+ struct nfs_fattr *fattr;
+};
+
+struct nfs4_link_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ const struct nfs_fh *dir_fh;
+ const struct qstr *name;
+ const u32 *bitmask;
+};
+
+struct nfs4_link_res {
+ struct nfs4_sequence_res seq_res;
+ const struct nfs_server *server;
+ struct nfs_fattr *fattr;
+ struct nfs4_change_info cinfo;
+ struct nfs_fattr *dir_attr;
+};
+
+struct nfs4_lookup_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *dir_fh;
+ const struct qstr *name;
+ const u32 *bitmask;
+};
+
+struct nfs4_lookup_res {
+ struct nfs4_sequence_res seq_res;
+ const struct nfs_server *server;
+ struct nfs_fattr *fattr;
+ struct nfs_fh *fh;
+};
+
+struct nfs4_lookupp_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ const u32 *bitmask;
+};
+
+struct nfs4_lookupp_res {
+ struct nfs4_sequence_res seq_res;
+ const struct nfs_server *server;
+ struct nfs_fattr *fattr;
+ struct nfs_fh *fh;
+};
+
+struct nfs4_lookup_root_arg {
+ struct nfs4_sequence_args seq_args;
+ const u32 *bitmask;
+};
+
+struct nfs4_pathconf_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ const u32 *bitmask;
+};
+
+struct nfs4_pathconf_res {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_pathconf *pathconf;
+};
+
+struct nfs4_readdir_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ u64 cookie;
+ nfs4_verifier verifier;
+ u32 count;
+ struct page **pages;
+ unsigned int pgbase;
+ const u32 *bitmask;
+ bool plus;
+};
+
+struct nfs4_readdir_res {
+ struct nfs4_sequence_res seq_res;
+ nfs4_verifier verifier;
+ unsigned int pgbase;
+};
+
+struct nfs4_readlink {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ unsigned int pgbase;
+ unsigned int pglen;
+ struct page **pages;
+};
+
+struct nfs4_readlink_res {
+ struct nfs4_sequence_res seq_res;
+};
+
+struct nfs4_setclientid {
+ const nfs4_verifier *sc_verifier;
+ u32 sc_prog;
+ unsigned int sc_netid_len;
+ char sc_netid[6];
+ unsigned int sc_uaddr_len;
+ char sc_uaddr[58];
+ struct nfs_client *sc_clnt;
+ struct rpc_cred *sc_cred;
+};
+
+struct nfs4_setclientid_res {
+ u64 clientid;
+ nfs4_verifier confirm;
+};
+
+struct nfs4_statfs_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ const u32 *bitmask;
+};
+
+struct nfs4_statfs_res {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_fsstat *fsstat;
+};
+
+struct nfs4_open_caps {
+ u32 oa_share_access[1];
+ u32 oa_share_deny[1];
+ u32 oa_share_access_want[1];
+ u32 oa_open_claim[1];
+ u32 oa_createmode[1];
+};
+
+struct nfs4_server_caps_arg {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fhandle;
+ const u32 *bitmask;
+};
+
+struct nfs4_server_caps_res {
+ struct nfs4_sequence_res seq_res;
+ u32 attr_bitmask[3];
+ u32 exclcreat_bitmask[3];
+ u32 acl_bitmask;
+ u32 has_links;
+ u32 has_symlinks;
+ u32 fh_expire_type;
+ u32 case_insensitive;
+ u32 case_preserving;
+ struct nfs4_open_caps open_caps;
+};
+
+struct nfs4_fs_locations_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *dir_fh;
+ const struct nfs_fh *fh;
+ const struct qstr *name;
+ struct page *page;
+ const u32 *bitmask;
+ clientid4 clientid;
+ unsigned char migration: 1;
+ unsigned char renew: 1;
+};
+
+struct nfs4_fs_locations_res {
+ struct nfs4_sequence_res seq_res;
+ struct nfs4_fs_locations *fs_locations;
+ unsigned char migration: 1;
+ unsigned char renew: 1;
+};
+
+struct nfs4_secinfo4 {
+ u32 flavor;
+ struct rpcsec_gss_info flavor_info;
+};
+
+struct nfs4_secinfo_flavors {
+ unsigned int num_flavors;
+ struct nfs4_secinfo4 flavors[0];
+};
+
+struct nfs4_secinfo_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *dir_fh;
+ const struct qstr *name;
+};
+
+struct nfs4_secinfo_res {
+ struct nfs4_sequence_res seq_res;
+ struct nfs4_secinfo_flavors *flavors;
+};
+
+struct nfs4_fsid_present_arg {
+ struct nfs4_sequence_args seq_args;
+ const struct nfs_fh *fh;
+ clientid4 clientid;
+ unsigned char renew: 1;
+};
+
+struct nfs4_fsid_present_res {
+ struct nfs4_sequence_res seq_res;
+ struct nfs_fh *fh;
+ unsigned char renew: 1;
+};
+
+struct nfs41_state_protection {
+ u32 how;
+ struct nfs4_op_map enforce;
+ struct nfs4_op_map allow;
+};
+
+struct nfs41_exchange_id_args {
+ struct nfs_client *client;
+ nfs4_verifier verifier;
+ u32 flags;
+ struct nfs41_state_protection state_protect;
+};
+
+struct nfs41_bind_conn_to_session_args {
+ struct nfs_client *client;
+ struct nfs4_sessionid sessionid;
+ u32 dir;
+ bool use_conn_in_rdma_mode;
+ int retries;
+};
+
+struct nfs41_bind_conn_to_session_res {
+ struct nfs4_sessionid sessionid;
+ u32 dir;
+ bool use_conn_in_rdma_mode;
+};
+
+struct nfs41_exchange_id_res {
+ u64 clientid;
+ u32 seqid;
+ u32 flags;
+ struct nfs41_server_owner *server_owner;
+ struct nfs41_server_scope *server_scope;
+ struct nfs41_impl_id *impl_id;
+ struct nfs41_state_protection state_protect;
+};
+
+struct nfs41_create_session_args {
+ struct nfs_client *client;
+ u64 clientid;
+ uint32_t seqid;
+ uint32_t flags;
+ uint32_t cb_program;
+ struct nfs4_channel_attrs fc_attrs;
+ struct nfs4_channel_attrs bc_attrs;
+};
+
+struct nfs41_create_session_res {
+ struct nfs4_sessionid sessionid;
+ uint32_t seqid;
+ uint32_t flags;
+ struct nfs4_channel_attrs fc_attrs;
+ struct nfs4_channel_attrs bc_attrs;
+};
+
+struct nfs41_reclaim_complete_args {
+ struct nfs4_sequence_args seq_args;
+ unsigned char one_fs: 1;
+};
+
+struct nfs41_reclaim_complete_res {
+ struct nfs4_sequence_res seq_res;
+};
+
+struct nfs41_secinfo_no_name_args {
+ struct nfs4_sequence_args seq_args;
+ int style;
+};
+
+struct nfs41_test_stateid_args {
+ struct nfs4_sequence_args seq_args;
+ nfs4_stateid stateid;
+};
+
+struct nfs41_test_stateid_res {
+ struct nfs4_sequence_res seq_res;
+ unsigned int status;
+};
+
+struct nfs41_free_stateid_args {
+ struct nfs4_sequence_args seq_args;
+ nfs4_stateid stateid;
+};
+
+struct nfs41_free_stateid_res {
+ struct nfs4_sequence_res seq_res;
+ unsigned int status;
+};
+
+struct nfs4_cached_acl {
+ enum nfs4_acl_type type;
+ int cached;
+ size_t len;
+ char data[0];
+};
+
+enum {
+ NFS_OWNER_RECLAIM_REBOOT = 0,
+ NFS_OWNER_RECLAIM_NOGRACE = 1,
+};
+
+enum {
+ LK_STATE_IN_USE = 0,
+ NFS_DELEGATED_STATE = 1,
+ NFS_OPEN_STATE = 2,
+ NFS_O_RDONLY_STATE = 3,
+ NFS_O_WRONLY_STATE = 4,
+ NFS_O_RDWR_STATE = 5,
+ NFS_STATE_RECLAIM_REBOOT = 6,
+ NFS_STATE_RECLAIM_NOGRACE = 7,
+ NFS_STATE_POSIX_LOCKS = 8,
+ NFS_STATE_RECOVERY_FAILED = 9,
+ NFS_STATE_MAY_NOTIFY_LOCK = 10,
+ NFS_STATE_CHANGE_WAIT = 11,
+ NFS_CLNT_DST_SSC_COPY_STATE = 12,
+ NFS_CLNT_SRC_SSC_COPY_STATE = 13,
+ NFS_SRV_SSC_COPY_STATE = 14,
+};
+
+struct nfs4_exception {
+ struct nfs4_state *state;
+ struct inode *inode;
+ nfs4_stateid *stateid;
+ long int timeout;
+ short unsigned int retrans;
+ unsigned char task_is_privileged: 1;
+ unsigned char delay: 1;
+ unsigned char recovering: 1;
+ unsigned char retry: 1;
+ bool interruptible;
+};
+
+struct nfs4_opendata {
+ struct kref kref;
+ struct nfs_openargs o_arg;
+ struct nfs_openres o_res;
+ struct nfs_open_confirmargs c_arg;
+ struct nfs_open_confirmres c_res;
+ struct nfs4_string owner_name;
+ struct nfs4_string group_name;
+ struct nfs4_label *a_label;
+ struct nfs_fattr f_attr;
+ struct dentry *dir;
+ struct dentry *dentry;
+ struct nfs4_state_owner *owner;
+ struct nfs4_state *state;
+ struct iattr attrs;
+ struct nfs4_layoutget *lgp;
+ long unsigned int timestamp;
+ bool rpc_done;
+ bool file_created;
+ bool is_recover;
+ bool cancelled;
+ int rpc_status;
+};
+
+struct nfs4_add_xprt_data {
+ struct nfs_client *clp;
+ const struct cred *cred;
+};
+
+enum {
+ NFS_DELEGATION_NEED_RECLAIM = 0,
+ NFS_DELEGATION_RETURN = 1,
+ NFS_DELEGATION_RETURN_IF_CLOSED = 2,
+ NFS_DELEGATION_REFERENCED = 3,
+ NFS_DELEGATION_RETURNING = 4,
+ NFS_DELEGATION_REVOKED = 5,
+ NFS_DELEGATION_TEST_EXPIRED = 6,
+ NFS_DELEGATION_INODE_FREEING = 7,
+ NFS_DELEGATION_RETURN_DELAYED = 8,
+ NFS_DELEGATION_DELEGTIME = 9,
+};
+
+struct nfs_netns_client {
+ struct kobject kobject;
+ struct kobject nfs_net_kobj;
+ struct net *net;
+ const char *identifier;
+};
+
+enum nfs4_slot_tbl_state {
+ NFS4_SLOT_TBL_DRAINING = 0,
+};
+
+enum nfs4_session_state {
+ NFS4_SESSION_INITING = 0,
+ NFS4_SESSION_ESTABLISHED = 1,
+};
+
+struct nfs4_call_sync_data {
+ const struct nfs_server *seq_server;
+ struct nfs4_sequence_args *seq_args;
+ struct nfs4_sequence_res *seq_res;
+};
+
+struct nfs4_open_createattrs {
+ struct nfs4_label *label;
+ struct iattr *sattr;
+ const __u32 verf[2];
+};
+
+struct nfs4_closedata {
+ struct inode *inode;
+ struct nfs4_state *state;
+ struct nfs_closeargs arg;
+ struct nfs_closeres res;
+ struct {
+ struct nfs4_layoutreturn_args arg;
+ struct nfs4_layoutreturn_res res;
+ struct nfs4_xdr_opaque_data ld_private;
+ u32 roc_barrier;
+ bool roc;
+ } lr;
+ struct nfs_fattr fattr;
+ long unsigned int timestamp;
+};
+
+struct nfs4_createdata {
+ struct rpc_message msg;
+ struct nfs4_create_arg arg;
+ struct nfs4_create_res res;
+ struct nfs_fh fh;
+ struct nfs_fattr fattr;
+};
+
+struct nfs4_renewdata {
+ struct nfs_client *client;
+ long unsigned int timestamp;
+};
+
+struct nfs4_delegreturndata {
+ struct nfs4_delegreturnargs args;
+ struct nfs4_delegreturnres res;
+ struct nfs_fh fh;
+ nfs4_stateid stateid;
+ long unsigned int timestamp;
+ struct {
+ struct nfs4_layoutreturn_args arg;
+ struct nfs4_layoutreturn_res res;
+ struct nfs4_xdr_opaque_data ld_private;
+ u32 roc_barrier;
+ bool roc;
+ } lr;
+ struct nfs4_delegattr sattr;
+ struct nfs_fattr fattr;
+ int rpc_status;
+ struct inode *inode;
+};
+
+struct nfs4_unlockdata {
+ struct nfs_locku_args arg;
+ struct nfs_locku_res res;
+ struct nfs4_lock_state *lsp;
+ struct nfs_open_context *ctx;
+ struct nfs_lock_context *l_ctx;
+ struct file_lock fl;
+ struct nfs_server *server;
+ long unsigned int timestamp;
+};
+
+struct nfs4_lockdata {
+ struct nfs_lock_args arg;
+ struct nfs_lock_res res;
+ struct nfs4_lock_state *lsp;
+ struct nfs_open_context *ctx;
+ struct file_lock fl;
+ long unsigned int timestamp;
+ int rpc_status;
+ int cancelled;
+ struct nfs_server *server;
+};
+
+struct nfs4_lock_waiter {
+ struct inode *inode;
+ struct nfs_lowner owner;
+ wait_queue_entry_t wait;
+};
+
+struct nfs_release_lockowner_data {
+ struct nfs4_lock_state *lsp;
+ struct nfs_server *server;
+ struct nfs_release_lockowner_args args;
+ struct nfs_release_lockowner_res res;
+ long unsigned int timestamp;
+};
+
+struct rpc_bind_conn_calldata {
+ struct nfs_client *clp;
+ const struct cred *cred;
+};
+
+struct nfs41_exchange_id_data {
+ struct nfs41_exchange_id_res res;
+ struct nfs41_exchange_id_args args;
+};
+
+struct nfs4_get_lease_time_data {
+ struct nfs4_get_lease_time_args *args;
+ struct nfs4_get_lease_time_res *res;
+ struct nfs_client *clp;
+};
+
+struct nfs4_sequence_data {
+ struct nfs_client *clp;
+ struct nfs4_sequence_args args;
+ struct nfs4_sequence_res res;
+};
+
+struct nfs4_reclaim_complete_data {
+ struct nfs_client *clp;
+ struct nfs41_reclaim_complete_args arg;
+ struct nfs41_reclaim_complete_res res;
+};
+
+struct nfs_free_stateid_data {
+ struct nfs_server *server;
+ struct nfs41_free_stateid_args args;
+ struct nfs41_free_stateid_res res;
+};
+
+struct nfs4_filelayout {
+ struct pnfs_layout_hdr generic_hdr;
+ struct pnfs_ds_commit_info commit_info;
+};
+
+struct autofs_packet_hdr {
+ int proto_version;
+ int type;
+};
+
+struct autofs_packet_missing {
+ struct autofs_packet_hdr hdr;
+ autofs_wqt_t wait_queue_token;
+ int len;
+ char name[256];
+};
+
+struct autofs_packet_expire {
+ struct autofs_packet_hdr hdr;
+ int len;
+ char name[256];
+};
+
+enum autofs_notify {
+ NFY_NONE = 0,
+ NFY_MOUNT = 1,
+ NFY_EXPIRE = 2,
+};
+
+struct autofs_packet_expire_multi {
+ struct autofs_packet_hdr hdr;
+ autofs_wqt_t wait_queue_token;
+ int len;
+ char name[256];
+};
+
+union autofs_packet_union {
+ struct autofs_packet_hdr hdr;
+ struct autofs_packet_missing missing;
+ struct autofs_packet_expire expire;
+ struct autofs_packet_expire_multi expire_multi;
+};
+
+struct autofs_v5_packet {
+ struct autofs_packet_hdr hdr;
+ autofs_wqt_t wait_queue_token;
+ __u32 dev;
+ __u64 ino;
+ __u32 uid;
+ __u32 gid;
+ __u32 pid;
+ __u32 tgid;
+ __u32 len;
+ char name[256];
+};
+
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+
+union autofs_v5_packet_union {
+ struct autofs_packet_hdr hdr;
+ struct autofs_v5_packet v5_packet;
+ autofs_packet_missing_indirect_t missing_indirect;
+ autofs_packet_expire_indirect_t expire_indirect;
+ autofs_packet_missing_direct_t missing_direct;
+ autofs_packet_expire_direct_t expire_direct;
+};
+
+enum p9_perm_t {
+ P9_DMDIR = 2147483648,
+ P9_DMAPPEND = 1073741824,
+ P9_DMEXCL = 536870912,
+ P9_DMMOUNT = 268435456,
+ P9_DMAUTH = 134217728,
+ P9_DMTMP = 67108864,
+ P9_DMSYMLINK = 33554432,
+ P9_DMLINK = 16777216,
+ P9_DMDEVICE = 8388608,
+ P9_DMNAMEDPIPE = 2097152,
+ P9_DMSOCKET = 1048576,
+ P9_DMSETUID = 524288,
+ P9_DMSETGID = 262144,
+ P9_DMSETVTX = 65536,
+};
+
+struct p9_wstat {
+ u16 size;
+ u16 type;
+ u32 dev;
+ struct p9_qid qid;
+ u32 mode;
+ u32 atime;
+ u32 mtime;
+ u64 length;
+ const char *name;
+ const char *uid;
+ const char *gid;
+ const char *muid;
+ char *extension;
+ kuid_t n_uid;
+ kgid_t n_gid;
+ kuid_t n_muid;
+};
+
+struct p9_dirent {
+ struct p9_qid qid;
+ u64 d_off;
+ unsigned char d_type;
+ char d_name[256];
+};
+
+struct p9_rdir {
+ int head;
+ int tail;
+ uint8_t buf[0];
+};
+
+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 user_key_payload {
+ struct callback_head rcu;
+ short unsigned int datalen;
+ long: 0;
+ char data[0];
+};
+
+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 hashtab_key_params {
+ u32 (*hash)(const void *);
+ int (*cmp)(const void *, const void *);
+};
+
+struct policy_file {
+ char *data;
+ size_t len;
+};
+
+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,
+};
+
+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 {
+ long long unsigned int frameContentSize;
+ long long unsigned int windowSize;
+ unsigned int blockSizeMax;
+ ZSTD_frameType_e frameType;
+ unsigned int headerSize;
+ unsigned int dictID;
+ unsigned int checksumFlag;
+} ZSTD_frameHeader;
+
+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;
+
+typedef enum {
+ ZSTD_d_validateChecksum = 0,
+ ZSTD_d_ignoreChecksum = 1,
+} ZSTD_forceIgnoreChecksum_e;
+
+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_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;
+};
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+
+typedef ZSTD_DCtx zstd_dctx;
+
+enum aa_sfs_type {
+ AA_SFS_TYPE_BOOLEAN = 0,
+ AA_SFS_TYPE_STRING = 1,
+ AA_SFS_TYPE_U64 = 2,
+ AA_SFS_TYPE_FOPS = 3,
+ AA_SFS_TYPE_DIR = 4,
+};
+
+struct aa_sfs_entry {
+ const char *name;
+ struct dentry *dentry;
+ umode_t mode;
+ enum aa_sfs_type v_type;
+ union {
+ bool boolean;
+ char *string;
+ long unsigned int u64;
+ struct aa_sfs_entry *files;
+ } v;
+ const struct file_operations *file_ops;
+};
+
+struct aa_data {
+ char *key;
+ u32 size;
+ char *data;
+ struct rhash_head head;
+};
+
+struct aa_loaddata {
+ struct kref count;
+ struct list_head list;
+ struct work_struct work;
+ struct dentry *dents[6];
+ struct aa_ns *ns;
+ char *name;
+ size_t size;
+ size_t compressed_size;
+ long int revision;
+ int abi;
+ unsigned char *hash;
+ char *data;
+};
+
+enum {
+ AAFS_LOADDATA_ABI = 0,
+ AAFS_LOADDATA_REVISION = 1,
+ AAFS_LOADDATA_HASH = 2,
+ AAFS_LOADDATA_DATA = 3,
+ AAFS_LOADDATA_COMPRESSED_SIZE = 4,
+ AAFS_LOADDATA_DIR = 5,
+ AAFS_LOADDATA_NDENTS = 6,
+};
+
+struct rawdata_f_data {
+ struct aa_loaddata *loaddata;
+};
+
+struct aa_revision {
+ struct aa_ns *ns;
+ long int last_read;
+};
+
+struct multi_transaction {
+ struct kref count;
+ ssize_t size;
+ char data[0];
+};
+
+typedef ZSTD_compressionParameters zstd_compression_parameters;
+
+typedef ZSTD_parameters zstd_parameters;
+
+typedef ZSTD_CCtx zstd_cctx;
+
+enum path_flags {
+ PATH_IS_DIR = 1,
+ PATH_CONNECT_PATH = 4,
+ PATH_CHROOT_REL = 8,
+ PATH_CHROOT_NSCONNECT = 16,
+ PATH_DELEGATE_DELETED = 65536,
+ PATH_MEDIATE_DELETED = 131072,
+};
+
+struct aa_load_ent {
+ struct list_head list;
+ struct aa_profile *new;
+ struct aa_profile *old;
+ struct aa_profile *rename;
+ const char *ns_name;
+};
+
+enum aa_code {
+ AA_U8 = 0,
+ AA_U16 = 1,
+ AA_U32 = 2,
+ AA_U64 = 3,
+ AA_NAME = 4,
+ AA_STRING = 5,
+ AA_BLOB = 6,
+ AA_STRUCT = 7,
+ AA_STRUCTEND = 8,
+ AA_LIST = 9,
+ AA_LISTEND = 10,
+ AA_ARRAY = 11,
+ AA_ARRAYEND = 12,
+};
+
+struct aa_ext {
+ void *start;
+ void *end;
+ void *pos;
+ u32 version;
+};
+
+struct aa_sk_ctx {
+ struct aa_label *label;
+ struct aa_label *peer;
+};
+
+struct crypto_sig {
+ struct crypto_tfm base;
+};
+
+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 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 {
+ struct {
+ unsigned int digestsize;
+ unsigned int statesize;
+ struct crypto_alg base;
+ };
+ struct hash_alg_common halg;
+ };
+};
+
+struct sha256_state {
+ u32 state[8];
+ u64 count;
+ u8 buf[64];
+};
+
+struct af_alg_type;
+
+struct alg_sock {
+ struct sock sk;
+ struct sock *parent;
+ atomic_t refcnt;
+ atomic_t nokey_refcnt;
+ const struct af_alg_type *type;
+ void *private;
+};
+
+struct af_alg_type {
+ void * (*bind)(const char *, u32, u32);
+ void (*release)(void *);
+ int (*setkey)(void *, const u8 *, unsigned int);
+ int (*setentropy)(void *, sockptr_t, unsigned int);
+ int (*accept)(void *, struct sock *);
+ int (*accept_nokey)(void *, struct sock *);
+ int (*setauthsize)(void *, unsigned int);
+ struct proto_ops *ops;
+ struct proto_ops *ops_nokey;
+ struct module *owner;
+ char name[14];
+};
+
+struct af_alg_sgl {
+ struct sg_table sgt;
+ struct scatterlist sgl[17];
+ bool need_unpin;
+};
+
+struct hash_ctx {
+ struct af_alg_sgl sgl;
+ u8 *result;
+ struct crypto_wait wait;
+ unsigned int len;
+ bool more;
+ struct ahash_request req;
+};
+
+struct rq_map_data {
+ struct page **pages;
+ long unsigned int offset;
+ short unsigned int page_order;
+ short unsigned int 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];
+};
+
+struct blk_mq_hw_ctx_sysfs_entry {
+ struct attribute attr;
+ ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
+};
+
+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 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;
+};
+
+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 class_dev_iter {
+ struct klist_iter ki;
+ const struct device_type *type;
+ struct subsys_private *sp;
+};
+
+struct io_uring_rsrc_update {
+ __u32 offset;
+ __u32 resv;
+ __u64 data;
+};
+
+typedef struct io_wq_work *free_work_fn(struct io_wq_work *);
+
+typedef void io_wq_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;
+};
+
+enum io_uring_socket_op {
+ SOCKET_URING_OP_SIOCINQ = 0,
+ SOCKET_URING_OP_SIOCOUTQ = 1,
+ SOCKET_URING_OP_GETSOCKOPT = 2,
+ SOCKET_URING_OP_SETSOCKOPT = 3,
+};
+
+struct uring_cache {
+ struct io_uring_sqe sqes[2];
+};
+
+struct io_epoll {
+ struct file *file;
+ int epfd;
+ int op;
+ int fd;
+ struct epoll_event event;
+};
+
+struct interval_tree_node {
+ struct rb_node rb;
+ long unsigned int start;
+ long unsigned int last;
+ long unsigned int __subtree_last;
+};
+
+typedef enum {
+ CODES = 0,
+ LENS = 1,
+ DISTS = 2,
+} codetype;
+
+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;
+
+typedef struct {
+ BYTE maxTableLog;
+ BYTE tableType;
+ BYTE tableLog;
+ BYTE reserved;
+} DTableDesc;
+
+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 struct {
+ BYTE symbol;
+} sortedSymbol_t;
+
+typedef U32 rankValCol_t[13];
+
+typedef struct {
+ U32 rankVal[156];
+ U32 rankStats[13];
+ U32 rankStart0[15];
+ sortedSymbol_t sortedSymbol[256];
+ BYTE weightList[256];
+ U32 calleeWksp[218];
+} HUF_ReadDTableX2_Workspace;
+
+typedef struct {
+ U32 tableTime;
+ U32 decode256Time;
+} algo_time_t;
+
+typedef ZSTD_ErrorCode ERR_enum;
+
+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 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 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 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];
+};
+
+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,
+};
+
+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 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;
+};
+
+enum dim_cq_period_mode {
+ DIM_CQ_PERIOD_MODE_START_FROM_EQE = 0,
+ DIM_CQ_PERIOD_MODE_START_FROM_CQE = 1,
+ DIM_CQ_PERIOD_NUM_MODES = 2,
+};
+
+enum dim_state {
+ DIM_START_MEASURE = 0,
+ DIM_MEASURE_IN_PROGRESS = 1,
+ DIM_APPLY_NEW_PROFILE = 2,
+};
+
+enum dim_stats_state {
+ DIM_STATS_WORSE = 0,
+ DIM_STATS_SAME = 1,
+ DIM_STATS_BETTER = 2,
+};
+
+enum dim_step_result {
+ DIM_STEPPED = 0,
+ DIM_TOO_TIRED = 1,
+ DIM_ON_EDGE = 2,
+};
+
+enum acpi_cdat_type {
+ ACPI_CDAT_TYPE_DSMAS = 0,
+ ACPI_CDAT_TYPE_DSLBIS = 1,
+ ACPI_CDAT_TYPE_DSMSCIS = 2,
+ ACPI_CDAT_TYPE_DSIS = 3,
+ ACPI_CDAT_TYPE_DSEMTS = 4,
+ ACPI_CDAT_TYPE_SSLBIS = 5,
+ ACPI_CDAT_TYPE_RESERVED = 6,
+};
+
+enum acpi_subtable_type {
+ ACPI_SUBTABLE_COMMON = 0,
+ ACPI_SUBTABLE_HMAT = 1,
+ ACPI_SUBTABLE_PRMT = 2,
+ ACPI_SUBTABLE_CEDT = 3,
+ CDAT_SUBTABLE = 4,
+};
+
+struct acpi_subtable_entry {
+ union acpi_subtable_headers *hdr;
+ enum acpi_subtable_type type;
+};
+
+struct acpi_madt_imsic {
+ struct acpi_subtable_header header;
+ u8 version;
+ u8 reserved;
+ u32 flags;
+ u16 num_ids;
+ u16 num_guest_ids;
+ u8 guest_index_bits;
+ u8 hart_index_bits;
+ u8 group_index_bits;
+ u8 group_index_shift;
+};
+
+typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
+
+enum CV1800B_POWER_DOMAIN {
+ VDD18A_AUD = 0,
+ VDD18A_USB_PLL_ETH_CSI = 1,
+ VDD33A_ETH_USB_SD1 = 2,
+ VDDIO_RTC___2 = 3,
+ VDDIO_SD0_SPI = 4,
+};
+
+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 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_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 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_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,
+};
+
+enum pci_bar_type {
+ pci_bar_unknown = 0,
+ pci_bar_io = 1,
+ pci_bar_mem32 = 2,
+ pci_bar_mem64 = 3,
+};
+
+struct pci_domain_busn_res {
+ struct list_head list;
+ struct resource res;
+ int domain_nr;
+};
+
+struct pci_fixup {
+ u16 vendor;
+ u16 device;
+ u32 class;
+ unsigned int class_shift;
+ void (*hook)(struct pci_dev *);
+};
+
+enum msi_desc_filter {
+ MSI_DESC_ALL = 0,
+ MSI_DESC_NOTASSOCIATED = 1,
+ MSI_DESC_ASSOCIATED = 2,
+};
+
+enum support_mode {
+ ALLOW_LEGACY = 0,
+ DENY_LEGACY = 1,
+};
+
+struct pci_slot_attribute {
+ struct attribute attr;
+ ssize_t (*show)(struct pci_slot *, char *);
+ ssize_t (*store)(struct pci_slot *, const char *, size_t);
+};
+
+enum smbios_attr_enum {
+ SMBIOS_ATTR_NONE = 0,
+ SMBIOS_ATTR_LABEL_SHOW = 1,
+ SMBIOS_ATTR_INSTANCE_SHOW = 2,
+};
+
+enum acpi_attr_enum {
+ ACPI_ATTR_LABEL_SHOW = 0,
+ ACPI_ATTR_INDEX_SHOW = 1,
+};
+
+struct dw_edma_region {
+ u64 paddr;
+ union {
+ void *mem;
+ void *io;
+ } vaddr;
+ size_t sz;
+};
+
+struct dw_edma_plat_ops {
+ int (*irq_vector)(struct device *, unsigned int);
+ u64 (*pci_address)(struct device *, phys_addr_t);
+};
+
+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_edma_chip_flags {
+ DW_EDMA_CHIP_LOCAL = 1,
+};
+
+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 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_item_operations;
+
+struct configfs_group_operations;
+
+struct configfs_attribute;
+
+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 *);
+ bool (*is_visible)(struct config_item *, struct configfs_attribute *, int);
+ bool (*is_bin_visible)(struct config_item *, struct configfs_bin_attribute *, int);
+};
+
+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 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_subsystem {
+ struct config_group su_group;
+ struct mutex su_mutex;
+};
+
+enum pci_barno {
+ NO_BAR = -1,
+ BAR_0 = 0,
+ BAR_1 = 1,
+ BAR_2 = 2,
+ BAR_3 = 3,
+ BAR_4 = 4,
+ BAR_5 = 5,
+};
+
+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_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;
+ long unsigned int function_num_map;
+ int domain_nr;
+ bool init_complete;
+};
+
+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, unsigned int, 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;
+};
+
+enum pci_epc_bar_type {
+ BAR_PROGRAMMABLE = 0,
+ BAR_FIXED = 1,
+ BAR_RESERVED = 2,
+};
+
+struct pci_epc_bar_desc {
+ enum pci_epc_bar_type type;
+ u64 fixed_size;
+ bool only_64bit;
+};
+
+struct pci_epc_features {
+ unsigned int linkup_notifier: 1;
+ unsigned int msi_capable: 1;
+ unsigned int msix_capable: 1;
+ struct pci_epc_bar_desc bar[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;
+ long unsigned int *bitmap;
+ int pages;
+ struct mutex lock;
+};
+
+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_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,
+};
+
+struct dw_pcie_ob_atu_cfg {
+ int index;
+ int type;
+ u8 func_no;
+ u8 code;
+ u8 routing;
+ u64 cpu_addr;
+ u64 pci_addr;
+ u64 size;
+};
+
+struct dw_pcie_rp;
+
+struct dw_pcie_host_ops {
+ int (*init)(struct dw_pcie_rp *);
+ void (*deinit)(struct dw_pcie_rp *);
+ void (*post_init)(struct dw_pcie_rp *);
+ int (*msi_init)(struct dw_pcie_rp *);
+ void (*pme_turn_off)(struct dw_pcie_rp *);
+};
+
+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;
+ long unsigned int msi_irq_in_use[4];
+ bool use_atu_msg;
+ int msg_atu_index;
+ struct resource *msg_res;
+};
+
+struct dw_pcie_ep;
+
+struct dw_pcie_ep_ops {
+ void (*pre_init)(struct dw_pcie_ep *);
+ void (*init)(struct dw_pcie_ep *);
+ int (*raise_irq)(struct dw_pcie_ep *, u8, unsigned int, u16);
+ const struct pci_epc_features * (*get_features)(struct dw_pcie_ep *);
+ unsigned int (*get_dbi_offset)(struct dw_pcie_ep *, u8);
+ unsigned int (*get_dbi2_offset)(struct dw_pcie_ep *, u8);
+};
+
+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;
+ long unsigned int *ib_window_map;
+ long unsigned int *ob_window_map;
+ void *msi_mem;
+ phys_addr_t msi_mem_phys;
+ struct pci_epf_bar *epf_bar[6];
+};
+
+struct dw_pcie;
+
+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 {
+ struct device *dev;
+ void *dbi_base;
+ resource_size_t dbi_phys_addr;
+ void *dbi_base2;
+ void *atu_base;
+ resource_size_t atu_phys_addr;
+ 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;
+ long unsigned int caps;
+ int num_lanes;
+ int max_link_speed;
+ 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 fb_cmap_user {
+ __u32 start;
+ __u32 len;
+ __u16 *red;
+ __u16 *green;
+ __u16 *blue;
+ __u16 *transp;
+};
+
+typedef u32 (*acpi_interface_handler)(acpi_string, u32);
+
+struct acpi_osi_entry {
+ char string[64];
+ bool enable;
+};
+
+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_hardware_id {
+ struct list_head list;
+ const char *id;
+};
+
+struct acpi_data_node {
+ struct list_head sibling;
+ const char *name;
+ acpi_handle handle;
+ struct fwnode_handle fwnode;
+ struct fwnode_handle *parent;
+ struct acpi_device_data data;
+ struct kobject kobj;
+ struct completion kobj_done;
+};
+
+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_device_physical_node {
+ struct list_head node;
+ struct device *dev;
+ unsigned int node_id;
+ bool put_online: 1;
+};
+
+enum acpi_bridge_type {
+ ACPI_BRIDGE_TYPE_PCIE = 1,
+ ACPI_BRIDGE_TYPE_CXL = 2,
+};
+
+struct acpi_osc_context {
+ char *uuid_str;
+ int rev;
+ struct acpi_buffer cap;
+ struct acpi_buffer ret;
+};
+
+struct pci_osc_bit_struct {
+ u32 bit;
+ char *desc;
+};
+
+struct acpi_device_properties {
+ struct list_head list;
+ const guid_t *guid;
+ union acpi_object *properties;
+ void **bufs;
+};
+
+typedef acpi_status (*acpi_exception_handler)(acpi_status, acpi_name, u16, u32, void *);
+
+enum {
+ MATCH_MTR = 0,
+ MATCH_MEQ = 1,
+ MATCH_MLE = 2,
+ MATCH_MLT = 3,
+ MATCH_MGE = 4,
+ MATCH_MGT = 5,
+};
+
+typedef acpi_status (*acpi_init_handler)(acpi_handle, u32);
+
+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 *);
+
+struct acpi_rsconvert_info {
+ u8 opcode;
+ u8 resource_offset;
+ u8 aml_offset;
+ u8 value;
+};
+
+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_predefined_names {
+ const char *name;
+ u8 type;
+ char *val;
+};
+
+typedef u32 (*acpi_sci_handler)(void *);
+
+typedef acpi_status (*acpi_table_handler)(u32, void *, void *);
+
+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_table_list {
+ struct acpi_table_desc *tables;
+ u32 current_table_count;
+ u32 max_table_count;
+ u8 flags;
+};
+
+struct acpi_sci_handler_info {
+ struct acpi_sci_handler_info *next;
+ acpi_sci_handler address;
+ void *context;
+};
+
+struct acpi_ged_handler_info {
+ struct acpi_ged_handler_info *next;
+ u32 int_id;
+ struct acpi_namespace_node *evt_method;
+};
+
+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_comment_node {
+ char *comment;
+ struct acpi_comment_node *next;
+};
+
+struct acpi_interface_info {
+ char *name;
+ struct acpi_interface_info *next;
+ u8 flags;
+ u8 value;
+};
+
+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;
+};
+
+struct acpi_ac {
+ struct power_supply *charger;
+ struct power_supply_desc charger_desc;
+ struct acpi_device *device;
+ long long unsigned int state;
+ struct notifier_block battery_nb;
+};
+
+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 language;
+ u16 pci_device_id;
+ u16 pci_vendor_id;
+ u8 pci_bus;
+ u8 pci_device;
+ u8 pci_function;
+ u32 pci_flags;
+ u8 pci_segment;
+ u32 uart_clk_freq;
+ u32 precise_baudrate;
+ u16 name_space_string_length;
+ u16 name_space_string_offset;
+ char name_space_string[0];
+} __attribute__((packed));
+
+struct amba_id {
+ unsigned int id;
+ unsigned int mask;
+ void *data;
+};
+
+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;
+};
+
+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;
+};
+
+struct clk_gpio {
+ struct clk_hw hw;
+ struct gpio_desc *gpiod;
+};
+
+struct sg2042_clk_data {
+ void *iobase;
+ struct clk_hw_onecell_data onecell_data;
+};
+
+struct sg2042_pll_clock {
+ struct clk_hw hw;
+ unsigned int id;
+ void *base;
+ spinlock_t *lock;
+ u32 offset_ctrl;
+ u8 shift_status_lock;
+ u8 shift_status_updating;
+ u8 shift_enable;
+};
+
+struct sg2042_pll_ctrl {
+ long unsigned int freq;
+ unsigned int fbdiv;
+ unsigned int postdiv1;
+ unsigned int postdiv2;
+ unsigned int refdiv;
+};
+
+struct jh71x0_clk_data {
+ const char *name;
+ long unsigned int flags;
+ u32 max;
+ u8 parents[4];
+};
+
+struct jh71x0_clk {
+ struct clk_hw hw;
+ unsigned int idx;
+ unsigned int max_div;
+};
+
+struct jh71x0_clk_priv {
+ spinlock_t rmw_lock;
+ struct device *dev;
+ void *base;
+ struct clk *original_clk;
+ struct notifier_block pll_clk_nb;
+ struct clk_hw *pll[3];
+ struct jh71x0_clk reg[0];
+};
+
+struct ccu_mult_internal {
+ u8 offset;
+ u8 shift;
+ u8 width;
+ u8 min;
+ u8 max;
+};
+
+struct ccu_nm {
+ u32 enable;
+ u32 lock;
+ struct ccu_mult_internal n;
+ struct ccu_div_internal___2 m;
+ struct ccu_frac_internal frac;
+ struct ccu_sdm_internal sdm;
+ unsigned int fixed_post_div;
+ unsigned int min_rate;
+ unsigned int max_rate;
+ struct ccu_common common;
+};
+
+struct _ccu_nm {
+ long unsigned int n;
+ long unsigned int min_n;
+ long unsigned int max_n;
+ long unsigned int m;
+ long unsigned int min_m;
+ long unsigned int max_m;
+};
+
+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 renesas_family {
+ const char name[16];
+ u32 reg;
+};
+
+struct renesas_soc {
+ const struct renesas_family *family;
+ u32 id;
+};
+
+struct renesas_id {
+ unsigned int offset;
+ u32 mask;
+};
+
+struct virtio_mmio_device {
+ struct virtio_device vdev;
+ struct platform_device *pdev;
+ void *base;
+ long unsigned int version;
+ spinlock_t lock;
+ struct list_head virtqueues;
+};
+
+struct virtio_mmio_vq_info {
+ struct virtqueue *vq;
+ struct list_head node;
+};
+
+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_lookup {
+ struct list_head list;
+ const char *provider;
+ unsigned int index;
+ const char *dev_id;
+ const char *con_id;
+};
+
+struct reset_control_array {
+ struct reset_control base;
+ unsigned int num_rstcs;
+ struct reset_control *rstc[0];
+};
+
+struct reset_control_bulk_devres {
+ int num_rstcs;
+ struct reset_control_bulk_data *rstcs;
+};
+
+enum hwparam_type {
+ hwparam_ioport = 0,
+ hwparam_iomem = 1,
+ hwparam_ioport_or_iomem = 2,
+ hwparam_irq = 3,
+ hwparam_dma = 4,
+ hwparam_dma_addr = 5,
+ hwparam_other = 6,
+};
+
+struct plat_serial8250_port {
+ long unsigned int iobase;
+ void *membase;
+ resource_size_t mapbase;
+ resource_size_t mapsize;
+ unsigned int uartclk;
+ unsigned int irq;
+ long unsigned int 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 *);
+};
+
+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 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;
+ short unsigned int iomem_reg_shift;
+};
+
+typedef void (*serial8250_isa_config_fn)(int, struct uart_port *, u32 *);
+
+struct dw8250_port_data {
+ int line;
+ struct uart_8250_dma dma;
+ u32 cpr_value;
+ u8 dlf_size;
+ bool hw_rs485_support;
+};
+
+struct splice_desc {
+ size_t total_len;
+ unsigned int len;
+ unsigned int flags;
+ union {
+ void *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 *);
+
+struct memdev {
+ const char *name;
+ const struct file_operations *fops;
+ fmode_t fmode;
+ umode_t mode;
+};
+
+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;
+};
+
+union device_attr_group_devres {
+ const struct attribute_group *group;
+ const struct attribute_group **groups;
+};
+
+struct class_dir {
+ struct kobject kobj;
+ const struct class *class;
+};
+
+struct root_device {
+ struct device dev;
+ struct module *owner;
+};
+
+struct internal_container {
+ struct klist_node node;
+ struct attribute_container *cont;
+ struct device classdev;
+};
+
+typedef void * (*devcon_match_fn_t)(const struct fwnode_handle *, const char *, void *);
+
+typedef int (*pm_callback_t)(struct device *);
+
+struct syscore_ops {
+ struct list_head node;
+ int (*suspend)();
+ void (*resume)();
+ void (*shutdown)();
+};
+
+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,
+};
+
+enum fw_status {
+ FW_STATUS_UNKNOWN = 0,
+ FW_STATUS_LOADING = 1,
+ FW_STATUS_DONE = 2,
+ FW_STATUS_ABORTED = 3,
+};
+
+struct fw_state {
+ struct completion completion;
+ enum fw_status status;
+};
+
+struct firmware_cache;
+
+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;
+ const char *fw_name;
+};
+
+struct firmware_cache {
+ spinlock_t lock;
+ struct list_head head;
+ int state;
+ spinlock_t name_lock;
+ struct list_head fw_names;
+ struct delayed_work work;
+ struct notifier_block pm_notify;
+};
+
+struct fw_cache_entry {
+ struct list_head list;
+ const char *name;
+};
+
+struct fw_name_devm {
+ long unsigned int magic;
+ const char *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 soc_device {
+ struct device dev;
+ struct soc_device_attribute *attr;
+ int soc_dev_num;
+};
+
+struct syscon_platform_data {
+ const char *label;
+};
+
+struct syscon {
+ struct device_node *np;
+ struct regmap *regmap;
+ struct reset_control *reset;
+ struct list_head list;
+};
+
+enum {
+ ND_MIN_NAMESPACE_SIZE = 4096,
+};
+
+enum {
+ REGION_INTERSECTS = 0,
+ REGION_DISJOINT = 1,
+ REGION_MIXED = 2,
+};
+
+struct nd_namespace_pmem {
+ struct nd_namespace_io nsio;
+ long unsigned int lbasize;
+ char *alt_name;
+ uuid_t *uuid;
+ int id;
+};
+
+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 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 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 nd_namespace_label {
+ union {
+ struct nvdimm_cxl_label cxl;
+ struct nvdimm_efi_label efi;
+ };
+};
+
+struct nd_label_id {
+ char id[50];
+};
+
+enum nd_label_flags {
+ ND_LABEL_REAP = 0,
+};
+
+struct nd_label_ent {
+ struct list_head list;
+ long unsigned int flags;
+ struct nd_namespace_label *label;
+};
+
+enum alloc_loc {
+ ALLOC_ERR = 0,
+ ALLOC_BEFORE = 1,
+ ALLOC_MID = 2,
+ ALLOC_AFTER = 3,
+};
+
+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 double_list {
+ struct list_head *top;
+ struct list_head *bottom;
+};
+
+struct scsi_varlen_cdb_hdr {
+ __u8 opcode;
+ __u8 control;
+ __u8 misc[5];
+ __u8 additional_cdb_length;
+ __be16 service_action;
+};
+
+enum ata_lpm_hints {
+ ATA_LPM_EMPTY = 1,
+ ATA_LPM_HIPM = 2,
+ ATA_LPM_WAKE_ONLY = 4,
+};
+
+enum {
+ ATA_EH_SPDN_NCQ_OFF = 1,
+ ATA_EH_SPDN_SPEED_DOWN = 2,
+ ATA_EH_SPDN_FALLBACK_TO_PIO = 4,
+ ATA_EH_SPDN_KEEP_ERRORS = 8,
+ ATA_EFLAG_IS_IO = 1,
+ ATA_EFLAG_DUBIOUS_XFER = 2,
+ ATA_EFLAG_OLD_ER = -2147483648,
+ ATA_ECAT_NONE = 0,
+ ATA_ECAT_ATA_BUS = 1,
+ ATA_ECAT_TOUT_HSM = 2,
+ ATA_ECAT_UNK_DEV = 3,
+ ATA_ECAT_DUBIOUS_NONE = 4,
+ ATA_ECAT_DUBIOUS_ATA_BUS = 5,
+ ATA_ECAT_DUBIOUS_TOUT_HSM = 6,
+ ATA_ECAT_DUBIOUS_UNK_DEV = 7,
+ ATA_ECAT_NR = 8,
+ ATA_EH_CMD_DFL_TIMEOUT = 5000,
+ ATA_EH_RESET_COOL_DOWN = 5000,
+ ATA_EH_PRERESET_TIMEOUT = 10000,
+ ATA_EH_FASTDRAIN_INTERVAL = 3000,
+ ATA_EH_UA_TRIES = 5,
+ ATA_EH_PROBE_TRIAL_INTERVAL = 60000,
+ ATA_EH_PROBE_TRIALS = 2,
+};
+
+struct ata_eh_cmd_timeout_ent {
+ const u8 *commands;
+ const unsigned int *timeouts;
+};
+
+struct speed_down_verdict_arg {
+ u64 since;
+ int xfer_ok;
+ int nr_errors[8];
+};
+
+struct ata_acpi_gtf {
+ u8 tf[7];
+};
+
+struct ata_acpi_hotplug_context {
+ struct acpi_hotplug_context hp;
+ union {
+ struct ata_port *ap;
+ struct ata_device *dev;
+ } data;
+};
+
+struct fixed_partitions_quirks {
+ int (*post_parse)(struct mtd_info *, struct mtd_partition *, int);
+};
+
+struct sun6i_spi_cfg {
+ long unsigned int fifo_depth;
+ bool has_clk_ctl;
+ u32 mode_bits;
+};
+
+struct sun6i_spi {
+ struct spi_controller *host;
+ void *base_addr;
+ dma_addr_t dma_addr_rx;
+ dma_addr_t dma_addr_tx;
+ struct clk *hclk;
+ struct clk *mclk;
+ struct reset_control *rstc;
+ struct completion done;
+ struct completion dma_rx_done;
+ const u8 *tx_buf;
+ u8 *rx_buf;
+ int len;
+ const struct sun6i_spi_cfg *cfg;
+};
+
+struct mdiobus_devres {
+ struct mii_bus *mii;
+};
+
+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 flow_keys_basic {
+ struct flow_dissector_key_control control;
+ struct flow_dissector_key_basic basic;
+};
+
+struct virtio_net_config {
+ __u8 mac[6];
+ __virtio16 status;
+ __virtio16 max_virtqueue_pairs;
+ __virtio16 mtu;
+ __le32 speed;
+ __u8 duplex;
+ __u8 rss_max_key_size;
+ __le16 rss_max_indirection_table_length;
+ __le32 supported_hash_types;
+};
+
+struct virtio_net_hdr_v1 {
+ __u8 flags;
+ __u8 gso_type;
+ __virtio16 hdr_len;
+ __virtio16 gso_size;
+ union {
+ struct {
+ __virtio16 csum_start;
+ __virtio16 csum_offset;
+ };
+ struct {
+ __virtio16 start;
+ __virtio16 offset;
+ } csum;
+ struct {
+ __le16 segments;
+ __le16 dup_acks;
+ } rsc;
+ };
+ __virtio16 num_buffers;
+};
+
+struct virtio_net_hdr_v1_hash {
+ struct virtio_net_hdr_v1 hdr;
+ __le32 hash_value;
+ __le16 hash_report;
+ __le16 padding;
+};
+
+struct virtio_net_hdr {
+ __u8 flags;
+ __u8 gso_type;
+ __virtio16 hdr_len;
+ __virtio16 gso_size;
+ __virtio16 csum_start;
+ __virtio16 csum_offset;
+};
+
+struct virtio_net_hdr_mrg_rxbuf {
+ struct virtio_net_hdr hdr;
+ __virtio16 num_buffers;
+};
+
+struct virtio_net_ctrl_hdr {
+ __u8 class;
+ __u8 cmd;
+};
+
+typedef __u8 virtio_net_ctrl_ack;
+
+struct virtio_net_ctrl_mac {
+ __virtio32 entries;
+ __u8 macs[0];
+};
+
+struct virtio_net_ctrl_mq {
+ __virtio16 virtqueue_pairs;
+};
+
+struct virtio_net_ctrl_coal_tx {
+ __le32 tx_max_packets;
+ __le32 tx_usecs;
+};
+
+struct virtio_net_ctrl_coal_rx {
+ __le32 rx_max_packets;
+ __le32 rx_usecs;
+};
+
+struct virtio_net_ctrl_coal {
+ __le32 max_packets;
+ __le32 max_usecs;
+};
+
+struct virtio_net_ctrl_coal_vq {
+ __le16 vqn;
+ __le16 reserved;
+ struct virtio_net_ctrl_coal coal;
+};
+
+struct virtio_net_stats_capabilities {
+ __le64 supported_stats_types[1];
+};
+
+struct virtio_net_ctrl_queue_stats {
+ struct {
+ __le16 vq_index;
+ __le16 reserved[3];
+ __le64 types_bitmap[1];
+ } stats[1];
+};
+
+struct virtio_net_stats_reply_hdr {
+ __u8 type;
+ __u8 reserved;
+ __le16 vq_index;
+ __le16 reserved1;
+ __le16 size;
+};
+
+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 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_stats_rx {
+ u64 bytes;
+ u64 packets;
+ u64 alloc_fail;
+ u64 hw_drops;
+ u64 hw_drop_overruns;
+ u64 csum_unnecessary;
+ u64 csum_none;
+ u64 csum_bad;
+ u64 hw_gro_packets;
+ u64 hw_gro_bytes;
+ u64 hw_gro_wire_packets;
+ u64 hw_gro_wire_bytes;
+ u64 hw_drop_ratelimits;
+};
+
+struct netdev_queue_stats_tx {
+ u64 bytes;
+ u64 packets;
+ u64 hw_drops;
+ u64 hw_drop_errors;
+ u64 csum_none;
+ u64 needs_csum;
+ u64 hw_gso_packets;
+ u64 hw_gso_bytes;
+ u64 hw_gso_wire_packets;
+ u64 hw_gso_wire_bytes;
+ u64 hw_drop_ratelimits;
+ u64 stop;
+ u64 wake;
+};
+
+struct ewma_pkt_len {
+ long unsigned int internal;
+};
+
+struct virtnet_stat_desc {
+ char desc[32];
+ size_t offset;
+ size_t qstat_offset;
+};
+
+struct virtnet_sq_free_stats {
+ u64 packets;
+ u64 bytes;
+ u64 napi_packets;
+ u64 napi_bytes;
+};
+
+struct virtnet_sq_stats {
+ struct u64_stats_sync syncp;
+ u64_stats_t packets;
+ u64_stats_t bytes;
+ u64_stats_t xdp_tx;
+ u64_stats_t xdp_tx_drops;
+ u64_stats_t kicks;
+ u64_stats_t tx_timeouts;
+ u64_stats_t stop;
+ u64_stats_t wake;
+};
+
+struct virtnet_rq_stats {
+ struct u64_stats_sync syncp;
+ u64_stats_t packets;
+ u64_stats_t bytes;
+ u64_stats_t drops;
+ u64_stats_t xdp_packets;
+ u64_stats_t xdp_tx;
+ u64_stats_t xdp_redirects;
+ u64_stats_t xdp_drops;
+ u64_stats_t kicks;
+};
+
+struct virtnet_interrupt_coalesce {
+ u32 max_packets;
+ u32 max_usecs;
+};
+
+struct virtnet_rq_dma {
+ dma_addr_t addr;
+ u32 ref;
+ u16 len;
+ u16 need_sync;
+};
+
+struct send_queue {
+ struct virtqueue *vq;
+ struct scatterlist sg[19];
+ char name[16];
+ struct virtnet_sq_stats stats;
+ struct virtnet_interrupt_coalesce intr_coal;
+ struct napi_struct napi;
+ bool reset;
+};
+
+struct receive_queue {
+ struct virtqueue *vq;
+ struct napi_struct napi;
+ struct bpf_prog *xdp_prog;
+ struct virtnet_rq_stats stats;
+ u16 calls;
+ bool dim_enabled;
+ struct mutex dim_lock;
+ struct dim dim;
+ u32 packets_in_napi;
+ struct virtnet_interrupt_coalesce intr_coal;
+ struct page *pages;
+ struct ewma_pkt_len mrg_avg_pkt_len;
+ struct page_frag alloc_frag;
+ struct scatterlist sg[19];
+ unsigned int min_buf_len;
+ char name[16];
+ long: 64;
+ long: 64;
+ struct xdp_rxq_info xdp_rxq;
+ struct virtnet_rq_dma *last_dma;
+ struct xsk_buff_pool *xsk_pool;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct xdp_rxq_info xsk_rxq_info;
+ struct xdp_buff **xsk_buffs;
+ bool do_dma;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct virtio_net_ctrl_rss {
+ u32 hash_types;
+ u16 indirection_table_mask;
+ u16 unclassified_queue;
+ u16 hash_cfg_reserved;
+ u16 max_tx_vq;
+ u8 hash_key_length;
+ u8 key[40];
+ u16 *indirection_table;
+};
+
+struct control_buf {
+ struct virtio_net_ctrl_hdr hdr;
+ virtio_net_ctrl_ack status;
+};
+
+struct virtnet_info {
+ struct virtio_device *vdev;
+ struct virtqueue *cvq;
+ struct net_device *dev;
+ struct send_queue *sq;
+ struct receive_queue *rq;
+ unsigned int status;
+ u16 max_queue_pairs;
+ u16 curr_queue_pairs;
+ u16 xdp_queue_pairs;
+ bool xdp_enabled;
+ bool big_packets;
+ unsigned int big_packets_num_skbfrags;
+ bool mergeable_rx_bufs;
+ bool has_rss;
+ bool has_rss_hash_report;
+ u8 rss_key_size;
+ u16 rss_indir_table_size;
+ u32 rss_hash_types_supported;
+ u32 rss_hash_types_saved;
+ struct virtio_net_ctrl_rss rss;
+ bool has_cvq;
+ struct mutex cvq_lock;
+ bool any_header_sg;
+ u8 hdr_len;
+ struct delayed_work refill;
+ bool refill_enabled;
+ spinlock_t refill_lock;
+ struct work_struct config_work;
+ struct work_struct rx_mode_work;
+ bool rx_mode_work_enabled;
+ bool affinity_hint_set;
+ struct hlist_node node;
+ struct hlist_node node_dead;
+ struct control_buf *ctrl;
+ u8 duplex;
+ u32 speed;
+ bool rx_dim_enabled;
+ struct virtnet_interrupt_coalesce intr_coal_tx;
+ struct virtnet_interrupt_coalesce intr_coal_rx;
+ long unsigned int guest_offloads;
+ long unsigned int guest_offloads_capable;
+ struct failover *failover;
+ u64 device_stats_cap;
+};
+
+struct virtio_net_common_hdr {
+ union {
+ struct virtio_net_hdr hdr;
+ struct virtio_net_hdr_mrg_rxbuf mrg_hdr;
+ struct virtio_net_hdr_v1_hash hash_v1_hdr;
+ };
+};
+
+struct virtnet_stats_ctx {
+ bool to_qstat;
+ u32 desc_num[3];
+ u64 bitmap[3];
+ u32 size[3];
+ u64 *data;
+};
+
+struct e1000_opt_list {
+ int i;
+ char *str;
+};
+
+struct e1000_option {
+ enum {
+ enable_option = 0,
+ range_option = 1,
+ list_option = 2,
+ } type;
+ const char *name;
+ const char *err;
+ int def;
+ union {
+ struct {
+ int min;
+ int max;
+ } r;
+ struct {
+ int nr;
+ struct e1000_opt_list *p;
+ } l;
+ } arg;
+};
+
+enum mac_version {
+ RTL_GIGA_MAC_VER_02 = 0,
+ RTL_GIGA_MAC_VER_03 = 1,
+ RTL_GIGA_MAC_VER_04 = 2,
+ RTL_GIGA_MAC_VER_05 = 3,
+ RTL_GIGA_MAC_VER_06 = 4,
+ RTL_GIGA_MAC_VER_07 = 5,
+ RTL_GIGA_MAC_VER_08 = 6,
+ RTL_GIGA_MAC_VER_09 = 7,
+ RTL_GIGA_MAC_VER_10 = 8,
+ RTL_GIGA_MAC_VER_11 = 9,
+ RTL_GIGA_MAC_VER_14 = 10,
+ RTL_GIGA_MAC_VER_17 = 11,
+ RTL_GIGA_MAC_VER_18 = 12,
+ RTL_GIGA_MAC_VER_19 = 13,
+ RTL_GIGA_MAC_VER_20 = 14,
+ RTL_GIGA_MAC_VER_21 = 15,
+ RTL_GIGA_MAC_VER_22 = 16,
+ RTL_GIGA_MAC_VER_23 = 17,
+ RTL_GIGA_MAC_VER_24 = 18,
+ RTL_GIGA_MAC_VER_25 = 19,
+ RTL_GIGA_MAC_VER_26 = 20,
+ RTL_GIGA_MAC_VER_28 = 21,
+ RTL_GIGA_MAC_VER_29 = 22,
+ RTL_GIGA_MAC_VER_30 = 23,
+ RTL_GIGA_MAC_VER_31 = 24,
+ RTL_GIGA_MAC_VER_32 = 25,
+ RTL_GIGA_MAC_VER_33 = 26,
+ RTL_GIGA_MAC_VER_34 = 27,
+ RTL_GIGA_MAC_VER_35 = 28,
+ RTL_GIGA_MAC_VER_36 = 29,
+ RTL_GIGA_MAC_VER_37 = 30,
+ RTL_GIGA_MAC_VER_38 = 31,
+ RTL_GIGA_MAC_VER_39 = 32,
+ RTL_GIGA_MAC_VER_40 = 33,
+ RTL_GIGA_MAC_VER_42 = 34,
+ RTL_GIGA_MAC_VER_43 = 35,
+ RTL_GIGA_MAC_VER_44 = 36,
+ RTL_GIGA_MAC_VER_46 = 37,
+ RTL_GIGA_MAC_VER_48 = 38,
+ RTL_GIGA_MAC_VER_51 = 39,
+ RTL_GIGA_MAC_VER_52 = 40,
+ RTL_GIGA_MAC_VER_53 = 41,
+ RTL_GIGA_MAC_VER_61 = 42,
+ RTL_GIGA_MAC_VER_63 = 43,
+ RTL_GIGA_MAC_VER_65 = 44,
+ RTL_GIGA_MAC_VER_66 = 45,
+ RTL_GIGA_MAC_NONE = 46,
+};
+
+struct rtl8169_private;
+
+typedef void (*rtl_phy_cfg_fct)(struct rtl8169_private *, struct phy_device *);
+
+struct phy_reg {
+ u16 reg;
+ u16 val;
+};
+
+struct usb_descriptor_header {
+ __u8 bLength;
+ __u8 bDescriptorType;
+};
+
+struct usb_dev_cap_header {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bDevCapabilityType;
+};
+
+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);
+ int (*choose_configuration)(struct usb_device *);
+ const struct attribute_group **dev_groups;
+ struct device_driver driver;
+ const struct usb_device_id *id_table;
+ unsigned int supports_autosuspend: 1;
+ unsigned int generic_subclass: 1;
+};
+
+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_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 usb_port_status {
+ __le16 wPortStatus;
+ __le16 wPortChange;
+ __le32 dwExtPortStatus;
+};
+
+struct usb_hub_status {
+ __le16 wHubStatus;
+ __le16 wHubChange;
+};
+
+struct typec_connector {
+ void (*attach)(struct typec_connector *, struct device *);
+ void (*deattach)(struct typec_connector *, struct device *);
+};
+
+typedef u32 usb_port_location_t;
+
+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;
+ long unsigned int event_bits[1];
+ long unsigned int change_bits[1];
+ long unsigned int removed_bits[1];
+ long unsigned int wakeup_bits[1];
+ long unsigned int power_bits[1];
+ long unsigned int child_usage_bits[1];
+ long unsigned int 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_devs;
+};
+
+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 typec_connector *connector;
+ 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;
+};
+
+enum xfer_buf_dir {
+ TO_XFER_BUF = 0,
+ FROM_XFER_BUF = 1,
+};
+
+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;
+ unsigned int sg_was_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;
+};
+
+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;
+ const struct usb_endpoint_descriptor *desc;
+ const struct usb_ss_ep_comp_descriptor *comp_desc;
+ struct list_head ep_list;
+ struct usb_ep_caps caps;
+ bool claimed;
+ bool enabled;
+ unsigned int mult: 2;
+ unsigned int maxburst: 5;
+ u8 address;
+ u16 maxpacket;
+ u16 maxpacket_limit;
+ u16 max_streams;
+};
+
+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 *);
+};
+
+struct usb_dcd_config_params {
+ __u8 bU1devExitLat;
+ __le16 bU2DevExitLat;
+ __u8 besl_baseline;
+ __u8 besl_deep;
+};
+
+struct usb_gadget_driver;
+
+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, long unsigned int);
+ 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 *);
+};
+
+struct usb_udc;
+
+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_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 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;
+};
+
+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 ps2pp_info {
+ u8 model;
+ u8 kind;
+ u16 features;
+};
+
+struct i2c_smbus_alert_setup {
+ int irq;
+};
+
+struct dm_kobject_holder {
+ struct kobject kobj;
+ struct completion completion;
+};
+
+struct gov_attr_set {
+ struct kobject kobj;
+ struct list_head policy_list;
+ struct mutex update_lock;
+ int usage_count;
+};
+
+struct dbs_governor;
+
+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 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 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 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 mmc_driver {
+ struct device_driver drv;
+ int (*probe)(struct mmc_card *);
+ void (*remove)(struct mmc_card *);
+ void (*shutdown)(struct mmc_card *);
+};
+
+struct sdhci_adma2_64_desc {
+ __le16 cmd;
+ __le16 len;
+ __le32 addr_lo;
+ __le32 addr_hi;
+};
+
+enum sdhci_cookie {
+ COOKIE_UNMAPPED = 0,
+ COOKIE_PRE_MAPPED = 1,
+ COOKIE_MAPPED = 2,
+};
+
+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,
+};
+
+struct debugfs_blob_wrapper {
+ void *data;
+ long unsigned int size;
+};
+
+typedef efi_status_t efi_query_variable_store_t(u32, long unsigned int, bool);
+
+typedef struct {
+ efi_guid_t guid;
+ u64 table;
+} efi_config_table_64_t;
+
+typedef struct {
+ efi_guid_t guid;
+ long unsigned int *ptr;
+ const char name[16];
+} efi_config_table_type_t;
+
+struct efi_unaccepted_memory {
+ u32 version;
+ u32 unit_size;
+ u64 phys_base;
+ u64 size;
+ long unsigned int bitmap[0];
+};
+
+typedef struct {
+ u16 version;
+ u16 length;
+ u32 runtime_services_supported;
+} efi_rt_properties_table_t;
+
+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];
+};
+
+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 int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *, bool);
+
+struct acpi_table_rhct {
+ struct acpi_table_header header;
+ u32 flags;
+ u64 time_base_freq;
+ u32 node_count;
+ u32 node_offset;
+};
+
+struct mbox_chan;
+
+struct mbox_chan_ops {
+ int (*send_data)(struct mbox_chan *, void *);
+ int (*flush)(struct mbox_chan *, long unsigned int);
+ 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_controller;
+
+struct mbox_client;
+
+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_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 sun6i_msgbox {
+ struct mbox_controller controller;
+ struct clk *clk;
+ spinlock_t lock;
+ void *regs;
+};
+
+enum devfreq_timer {
+ DEVFREQ_TIMER_DEFERRABLE = 0,
+ DEVFREQ_TIMER_DELAYED = 1,
+ DEVFREQ_TIMER_NUM = 2,
+};
+
+struct devfreq_dev_status {
+ long unsigned int total_time;
+ long unsigned int busy_time;
+ long unsigned int current_frequency;
+ void *private_data;
+};
+
+struct devfreq_dev_profile {
+ long unsigned int initial_freq;
+ unsigned int polling_ms;
+ enum devfreq_timer timer;
+ int (*target)(struct device *, long unsigned int *, u32);
+ int (*get_dev_status)(struct device *, struct devfreq_dev_status *);
+ int (*get_cur_freq)(struct device *, long unsigned int *);
+ void (*exit)(struct device *);
+ long unsigned int *freq_table;
+ unsigned int max_state;
+ bool is_cooling_device;
+};
+
+struct devfreq_stats {
+ unsigned int total_trans;
+ unsigned int *trans_table;
+ u64 *time_in_state;
+ u64 last_update;
+};
+
+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;
+ long unsigned int *freq_table;
+ unsigned int max_state;
+ long unsigned int 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;
+ long unsigned int scaling_min_freq;
+ long unsigned int scaling_max_freq;
+ bool stop_polling;
+ long unsigned int suspend_freq;
+ long unsigned int 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_governor {
+ struct list_head node;
+ const char name[16];
+ const u64 attrs;
+ const u64 flags;
+ int (*get_target_freq)(struct devfreq *, long unsigned int *);
+ int (*event_handler)(struct devfreq *, unsigned int, void *);
+};
+
+struct devfreq_freqs {
+ long unsigned int old;
+ long unsigned int new;
+};
+
+struct devfreq_cooling_power {
+ int (*get_real_power)(struct devfreq *, u32 *, long unsigned int, long unsigned int);
+};
+
+struct devfreq_notifier_devres {
+ struct devfreq *devfreq;
+ struct notifier_block *nb;
+ unsigned int list;
+};
+
+struct nvmem_device {
+ struct module *owner;
+ struct device dev;
+ struct list_head node;
+ 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;
+ void (*fixup_dt_cell_info)(struct nvmem_device *, struct nvmem_cell_info *);
+ 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;
+ bool sysfs_cells_populated;
+};
+
+struct nvmem_layout_driver {
+ struct device_driver driver;
+ int (*probe)(struct nvmem_layout *);
+ void (*remove)(struct nvmem_layout *);
+};
+
+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 sg_dma_page_iter {
+ struct sg_page_iter base;
+};
+
+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_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 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;
+};
+
+struct gnet_estimator {
+ signed char interval;
+ unsigned char ewma_log;
+};
+
+struct net_rate_estimator {
+ struct gnet_stats_basic_sync *bstats;
+ spinlock_t *stats_lock;
+ bool running;
+ struct gnet_stats_basic_sync *cpu_bstats;
+ u8 ewma_log;
+ u8 intvl_log;
+ seqcount_t seq;
+ u64 last_packets;
+ u64 last_bytes;
+ u64 avpps;
+ u64 avbps;
+ long unsigned int next_jiffies;
+ struct timer_list timer;
+ struct callback_head rcu;
+};
+
+struct tso_t {
+ int next_frag_idx;
+ int size;
+ void *data;
+ u16 ip_id;
+ u8 tlen;
+ bool ipv6;
+ u32 tcp_seq;
+};
+
+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 netdev_queue_attribute {
+ struct attribute attr;
+ ssize_t (*show)(struct netdev_queue *, char *);
+ ssize_t (*store)(struct netdev_queue *, const char *, size_t);
+};
+
+struct netlink_diag_req {
+ __u8 sdiag_family;
+ __u8 sdiag_protocol;
+ __u16 pad;
+ __u32 ndiag_ino;
+ __u32 ndiag_show;
+ __u32 ndiag_cookie[2];
+};
+
+struct netlink_diag_msg {
+ __u8 ndiag_family;
+ __u8 ndiag_type;
+ __u8 ndiag_protocol;
+ __u8 ndiag_state;
+ __u32 ndiag_portid;
+ __u32 ndiag_dst_portid;
+ __u32 ndiag_dst_group;
+ __u32 ndiag_ino;
+ __u32 ndiag_cookie[2];
+};
+
+enum {
+ NETLINK_DIAG_MEMINFO = 0,
+ NETLINK_DIAG_GROUPS = 1,
+ NETLINK_DIAG_RX_RING = 2,
+ NETLINK_DIAG_TX_RING = 3,
+ NETLINK_DIAG_FLAGS = 4,
+ __NETLINK_DIAG_MAX = 5,
+};
+
+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,
+};
+
+struct netlink_sock {
+ struct sock sk;
+ long unsigned int flags;
+ u32 portid;
+ u32 dst_portid;
+ u32 dst_group;
+ u32 subscriptions;
+ u32 ngroups;
+ long unsigned int *groups;
+ long unsigned int 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 nl_cb_mutex;
+ void (*netlink_rcv)(struct sk_buff *);
+ int (*netlink_bind)(struct net *, int);
+ void (*netlink_unbind)(struct net *, int);
+ void (*netlink_release)(struct sock *, long unsigned int *);
+ struct module *module;
+ struct rhash_head node;
+ struct callback_head rcu;
+};
+
+struct listeners;
+
+struct netlink_table {
+ struct rhashtable hash;
+ struct hlist_head mc_list;
+ struct listeners *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 *, long unsigned int *);
+ int registered;
+};
+
+enum phy_upstream {
+ PHY_UPSTREAM_MAC = 0,
+ PHY_UPSTREAM_PHY = 1,
+};
+
+enum ethtool_multicast_groups {
+ ETHNL_MCGRP_MONITOR = 0,
+};
+
+struct phy_device_node {
+ enum phy_upstream upstream_type;
+ union {
+ struct net_device *netdev;
+ struct phy_device *phydev;
+ } upstream;
+ struct sfp_bus *parent_sfp_bus;
+ struct phy_device *phy;
+};
+
+enum ethnl_sock_type {
+ ETHTOOL_SOCK_TYPE_MODULE_FW_FLASH = 0,
+};
+
+struct ethnl_sock_priv {
+ struct net_device *dev;
+ u32 portid;
+ enum ethnl_sock_type type;
+};
+
+struct ethnl_dump_ctx {
+ const struct ethnl_request_ops *ops;
+ struct ethnl_req_info *req_info;
+ struct ethnl_reply_data *reply_data;
+ long unsigned int pos_ifindex;
+};
+
+typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
+
+struct debug_reply_data {
+ struct ethnl_reply_data base;
+ u32 msg_mask;
+};
+
+enum {
+ ETHTOOL_A_PROFILE_UNSPEC = 0,
+ ETHTOOL_A_PROFILE_IRQ_MODERATION = 1,
+ __ETHTOOL_A_PROFILE_CNT = 2,
+ ETHTOOL_A_PROFILE_MAX = 1,
+};
+
+enum {
+ ETHTOOL_A_IRQ_MODERATION_UNSPEC = 0,
+ ETHTOOL_A_IRQ_MODERATION_USEC = 1,
+ ETHTOOL_A_IRQ_MODERATION_PKTS = 2,
+ ETHTOOL_A_IRQ_MODERATION_COMPS = 3,
+ __ETHTOOL_A_IRQ_MODERATION_CNT = 4,
+ ETHTOOL_A_IRQ_MODERATION_MAX = 3,
+};
+
+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_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;
+ long unsigned int 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_reset_flags {
+ ETH_RESET_MGMT = 1,
+ ETH_RESET_IRQ = 2,
+ ETH_RESET_DMA = 4,
+ ETH_RESET_FILTER = 8,
+ ETH_RESET_OFFLOAD = 16,
+ ETH_RESET_MAC = 32,
+ ETH_RESET_PHY = 64,
+ ETH_RESET_RAM = 128,
+ ETH_RESET_AP = 256,
+ ETH_RESET_DEDICATED = 65535,
+ ETH_RESET_ALL = 4294967295,
+};
+
+struct ethtool_cmis_fw_update_params {
+ struct net_device *dev;
+ struct ethtool_module_fw_flash_params params;
+ struct ethnl_module_fw_flash_ntf_params ntf_params;
+ const struct firmware *fw;
+};
+
+struct cmis_fw_update_fw_mng_features {
+ u8 start_cmd_payload_size;
+ u16 max_duration_start;
+ u16 max_duration_write;
+ u16 max_duration_complete;
+};
+
+struct cmis_cdb_fw_mng_features_rpl {
+ u8 resv1;
+ u8 resv2;
+ u8 start_cmd_payload_size;
+ u8 resv3;
+ u8 read_write_len_ext;
+ u8 write_mechanism;
+ u8 resv4;
+ u8 resv5;
+ __be16 max_duration_start;
+ __be16 resv6;
+ __be16 max_duration_write;
+ __be16 max_duration_complete;
+ __be16 resv7;
+};
+
+enum cmis_cdb_fw_write_mechanism {
+ CMIS_CDB_FW_WRITE_MECHANISM_LPL = 1,
+ CMIS_CDB_FW_WRITE_MECHANISM_BOTH = 17,
+};
+
+struct cmis_cdb_start_fw_download_pl_h {
+ __be32 image_size;
+ __be32 resv1;
+};
+
+struct cmis_cdb_start_fw_download_pl {
+ union {
+ struct {
+ __be32 image_size;
+ __be32 resv1;
+ };
+ struct cmis_cdb_start_fw_download_pl_h head;
+ };
+ u8 vendor_data[112];
+};
+
+struct cmis_cdb_write_fw_block_lpl_pl {
+ __be32 block_address;
+ u8 fw_block[116];
+};
+
+enum {
+ CMIS_MODULE_LOW_PWR = 1,
+ CMIS_MODULE_READY = 3,
+};
+
+struct cmis_cdb_run_fw_image_pl {
+ u8 resv1;
+ u8 image_to_run;
+ u16 delay_to_reset;
+};
+
+struct ip_mreqn {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_address;
+ int imr_ifindex;
+};
+
+struct net_proto_family {
+ int family;
+ int (*create)(struct net *, struct socket *, int, int);
+ struct module *owner;
+};
+
+struct compat_rtentry {
+ u32 rt_pad1;
+ struct sockaddr rt_dst;
+ struct sockaddr rt_gateway;
+ struct sockaddr rt_genmask;
+ short unsigned int rt_flags;
+ short int rt_pad2;
+ u32 rt_pad3;
+ unsigned char rt_tos;
+ unsigned char rt_class;
+ short int rt_pad4;
+ short int rt_metric;
+ compat_uptr_t rt_dev;
+ u32 rt_mtu;
+ u32 rt_window;
+ short unsigned int rt_irtt;
+};
+
+struct ip_sf_socklist {
+ unsigned int sl_max;
+ unsigned int sl_count;
+ struct callback_head rcu;
+ __be32 sl_addr[0];
+};
+
+struct ip_mc_socklist {
+ struct ip_mc_socklist *next_rcu;
+ struct ip_mreqn multi;
+ unsigned int sfmode;
+ struct ip_sf_socklist *sflist;
+ struct callback_head rcu;
+};
+
+struct ip_sf_list {
+ struct ip_sf_list *sf_next;
+ long unsigned int sf_count[2];
+ __be32 sf_inaddr;
+ unsigned char sf_gsresp;
+ unsigned char sf_oldin;
+ unsigned char sf_crcount;
+};
+
+struct ip_mc_list {
+ struct in_device *interface;
+ __be32 multiaddr;
+ unsigned int sfmode;
+ struct ip_sf_list *sources;
+ struct ip_sf_list *tomb;
+ long unsigned int sfcount[2];
+ union {
+ struct ip_mc_list *next;
+ struct ip_mc_list *next_rcu;
+ };
+ struct ip_mc_list *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;
+};
+
+struct rtentry {
+ long unsigned int rt_pad1;
+ struct sockaddr rt_dst;
+ struct sockaddr rt_gateway;
+ struct sockaddr rt_genmask;
+ short unsigned int rt_flags;
+ short int rt_pad2;
+ long unsigned int rt_pad3;
+ void *rt_pad4;
+ short int rt_metric;
+ char *rt_dev;
+ long unsigned int rt_mtu;
+ long unsigned int rt_window;
+ short unsigned int rt_irtt;
+};
+
+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 ping_table {
+ struct hlist_head hash[64];
+ spinlock_t lock;
+};
+
+struct arphdr {
+ __be16 ar_hrd;
+ __be16 ar_pro;
+ unsigned char ar_hln;
+ unsigned char ar_pln;
+ __be16 ar_op;
+};
+
+enum {
+ Root_NFS = 255,
+ Root_CIFS = 254,
+ Root_Generic = 253,
+ Root_RAM0 = 1048576,
+};
+
+struct ic_device {
+ struct ic_device *next;
+ struct net_device *dev;
+ short unsigned int flags;
+ short int able;
+ __be32 xid;
+};
+
+struct bootp_pkt {
+ struct iphdr iph;
+ struct udphdr udph;
+ u8 op;
+ u8 htype;
+ u8 hlen;
+ u8 hops;
+ __be32 xid;
+ __be16 secs;
+ __be16 flags;
+ __be32 client_ip;
+ __be32 your_ip;
+ __be32 server_ip;
+ __be32 relay_ip;
+ u8 hw_addr[16];
+ u8 serv_name[64];
+ u8 boot_file[128];
+ u8 exten[312];
+};
+
+enum {
+ UDP_BPF_IPV4 = 0,
+ UDP_BPF_IPV6 = 1,
+ UDP_BPF_NUM_PROTS = 2,
+};
+
+struct xfrm_input_afinfo {
+ u8 family;
+ bool is_ipip;
+ int (*callback)(struct sk_buff *, u8, int);
+};
+
+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 *next;
+ int priority;
+};
+
+struct unix_edge {
+ struct unix_sock *predecessor;
+ struct unix_sock *successor;
+ struct list_head vertex_entry;
+ struct list_head stack_entry;
+};
+
+struct unix_skb_parms {
+ struct pid *pid;
+ kuid_t uid;
+ kgid_t gid;
+ struct scm_fp_list *fp;
+ u32 secid;
+ u32 consumed;
+};
+
+enum unix_vertex_index {
+ UNIX_VERTEX_INDEX_MARK1 = 0,
+ UNIX_VERTEX_INDEX_MARK2 = 1,
+ UNIX_VERTEX_INDEX_START = 2,
+};
+
+struct seg6_pernet_data {
+ struct mutex lock;
+ struct in6_addr *tun_src;
+};
+
+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 udp_skb_cb {
+ union {
+ struct inet_skb_parm h4;
+ struct inet6_skb_parm h6;
+ } header;
+ __u16 cscov;
+ __u8 partial_cov;
+};
+
+struct udp_dev_scratch {
+ u32 _tsize_state;
+ u16 len;
+ bool is_linear;
+ bool csum_unnecessary;
+};
+
+struct udp_seq_afinfo {
+ sa_family_t family;
+ struct udp_table *udp_table;
+};
+
+struct udp_iter_state {
+ struct seq_net_private p;
+ int bucket;
+};
+
+struct ip6_mtuinfo {
+ struct sockaddr_in6 ip6m_addr;
+ __u32 ip6m_mtu;
+};
+
+struct in_pktinfo {
+ int ipi_ifindex;
+ struct in_addr ipi_spec_dst;
+ struct in_addr ipi_addr;
+};
+
+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;
+};
+
+enum sk_action {
+ SK_DROP = 0,
+ SK_PASS = 1,
+};
+
+enum {
+ CACHE_VALID = 0,
+ CACHE_NEGATIVE = 1,
+ CACHE_PENDING = 2,
+ CACHE_CLEANED = 3,
+};
+
+struct unix_domain {
+ struct auth_domain h;
+};
+
+struct ip_map {
+ struct cache_head h;
+ char m_class[8];
+ struct in6_addr m_addr;
+ struct unix_domain *m_client;
+ struct callback_head m_rcu;
+};
+
+struct unix_gid {
+ struct cache_head h;
+ kuid_t uid;
+ struct group_info *gi;
+ struct callback_head rcu;
+};
+
+typedef struct rpc_xprt * (*xprt_switch_find_xprt_t)(struct rpc_xprt_switch *, const struct rpc_xprt *);
+
+enum rpc_gss_proc {
+ RPC_GSS_PROC_DATA = 0,
+ RPC_GSS_PROC_INIT = 1,
+ RPC_GSS_PROC_CONTINUE_INIT = 2,
+ RPC_GSS_PROC_DESTROY = 3,
+};
+
+enum rpc_gss_svc {
+ RPC_GSS_SVC_NONE = 1,
+ RPC_GSS_SVC_INTEGRITY = 2,
+ RPC_GSS_SVC_PRIVACY = 3,
+};
+
+struct rpc_gss_wire_cred {
+ u32 gc_v;
+ u32 gc_proc;
+ u32 gc_seq;
+ u32 gc_svc;
+ struct xdr_netobj gc_ctx;
+};
+
+struct rsc;
+
+struct gss_svc_data {
+ struct rpc_gss_wire_cred clcred;
+ u32 gsd_databody_offset;
+ struct rsc *rsci;
+ __be32 gsd_seq_num;
+ u8 gsd_scratch[40];
+};
+
+struct gss_svc_seq_data {
+ u32 sd_max;
+ long unsigned int sd_win[2];
+ spinlock_t sd_lock;
+};
+
+struct rsc {
+ struct cache_head h;
+ struct xdr_netobj handle;
+ struct svc_cred cred;
+ struct gss_svc_seq_data seqdata;
+ struct gss_ctx *mechctx;
+ struct callback_head callback_head;
+};
+
+struct rsi {
+ struct cache_head h;
+ struct xdr_netobj in_handle;
+ struct xdr_netobj in_token;
+ struct xdr_netobj out_handle;
+ struct xdr_netobj out_token;
+ int major_status;
+ int minor_status;
+ struct callback_head callback_head;
+};
+
+struct gss_domain {
+ struct auth_domain h;
+ u32 pseudoflavor;
+};
+
+typedef s8 int8_t;
+
+typedef s64 int64_t;
+
+enum p9_msg_t {
+ P9_TLERROR = 6,
+ P9_RLERROR = 7,
+ P9_TSTATFS = 8,
+ P9_RSTATFS = 9,
+ P9_TLOPEN = 12,
+ P9_RLOPEN = 13,
+ P9_TLCREATE = 14,
+ P9_RLCREATE = 15,
+ P9_TSYMLINK = 16,
+ P9_RSYMLINK = 17,
+ P9_TMKNOD = 18,
+ P9_RMKNOD = 19,
+ P9_TRENAME = 20,
+ P9_RRENAME = 21,
+ P9_TREADLINK = 22,
+ P9_RREADLINK = 23,
+ P9_TGETATTR = 24,
+ P9_RGETATTR = 25,
+ P9_TSETATTR = 26,
+ P9_RSETATTR = 27,
+ P9_TXATTRWALK = 30,
+ P9_RXATTRWALK = 31,
+ P9_TXATTRCREATE = 32,
+ P9_RXATTRCREATE = 33,
+ P9_TREADDIR = 40,
+ P9_RREADDIR = 41,
+ P9_TFSYNC = 50,
+ P9_RFSYNC = 51,
+ P9_TLOCK = 52,
+ P9_RLOCK = 53,
+ P9_TGETLOCK = 54,
+ P9_RGETLOCK = 55,
+ P9_TLINK = 70,
+ P9_RLINK = 71,
+ P9_TMKDIR = 72,
+ P9_RMKDIR = 73,
+ P9_TRENAMEAT = 74,
+ P9_RRENAMEAT = 75,
+ P9_TUNLINKAT = 76,
+ P9_RUNLINKAT = 77,
+ P9_TVERSION = 100,
+ P9_RVERSION = 101,
+ P9_TAUTH = 102,
+ P9_RAUTH = 103,
+ P9_TATTACH = 104,
+ P9_RATTACH = 105,
+ P9_TERROR = 106,
+ P9_RERROR = 107,
+ P9_TFLUSH = 108,
+ P9_RFLUSH = 109,
+ P9_TWALK = 110,
+ P9_RWALK = 111,
+ P9_TOPEN = 112,
+ P9_ROPEN = 113,
+ P9_TCREATE = 114,
+ P9_RCREATE = 115,
+ P9_TREAD = 116,
+ P9_RREAD = 117,
+ P9_TWRITE = 118,
+ P9_RWRITE = 119,
+ P9_TCLUNK = 120,
+ P9_RCLUNK = 121,
+ P9_TREMOVE = 122,
+ P9_RREMOVE = 123,
+ P9_TSTAT = 124,
+ P9_RSTAT = 125,
+ P9_TWSTAT = 126,
+ P9_RWSTAT = 127,
+};
+
+struct p9_stat_dotl {
+ u64 st_result_mask;
+ struct p9_qid qid;
+ u32 st_mode;
+ kuid_t st_uid;
+ kgid_t st_gid;
+ u64 st_nlink;
+ u64 st_rdev;
+ u64 st_size;
+ u64 st_blksize;
+ u64 st_blocks;
+ u64 st_atime_sec;
+ u64 st_atime_nsec;
+ u64 st_mtime_sec;
+ u64 st_mtime_nsec;
+ u64 st_ctime_sec;
+ u64 st_ctime_nsec;
+ u64 st_btime_sec;
+ u64 st_btime_nsec;
+ u64 st_gen;
+ u64 st_data_version;
+};
+
+struct p9_iattr_dotl {
+ u32 valid;
+ u32 mode;
+ kuid_t uid;
+ kgid_t gid;
+ u64 size;
+ u64 atime_sec;
+ u64 atime_nsec;
+ u64 mtime_sec;
+ u64 mtime_nsec;
+};
+
+enum p9_proto_versions {
+ p9_proto_legacy = 0,
+ p9_proto_2000u = 1,
+ p9_proto_2000L = 2,
+};
+
+enum {
+ dns_key_data = 0,
+ dns_key_error = 1,
+};
+
+enum {
+ HANDSHAKE_A_ACCEPT_SOCKFD = 1,
+ HANDSHAKE_A_ACCEPT_HANDLER_CLASS = 2,
+ HANDSHAKE_A_ACCEPT_MESSAGE_TYPE = 3,
+ HANDSHAKE_A_ACCEPT_TIMEOUT = 4,
+ HANDSHAKE_A_ACCEPT_AUTH_MODE = 5,
+ HANDSHAKE_A_ACCEPT_PEER_IDENTITY = 6,
+ HANDSHAKE_A_ACCEPT_CERTIFICATE = 7,
+ HANDSHAKE_A_ACCEPT_PEERNAME = 8,
+ __HANDSHAKE_A_ACCEPT_MAX = 9,
+ HANDSHAKE_A_ACCEPT_MAX = 8,
+};
+
+enum {
+ HANDSHAKE_A_DONE_STATUS = 1,
+ HANDSHAKE_A_DONE_SOCKFD = 2,
+ HANDSHAKE_A_DONE_REMOTE_AUTH = 3,
+ __HANDSHAKE_A_DONE_MAX = 4,
+ HANDSHAKE_A_DONE_MAX = 3,
+};
+
+enum {
+ HANDSHAKE_CMD_READY = 1,
+ HANDSHAKE_CMD_ACCEPT = 2,
+ HANDSHAKE_CMD_DONE = 3,
+ __HANDSHAKE_CMD_MAX = 4,
+ HANDSHAKE_CMD_MAX = 3,
+};
+
+enum hp_flags_bits {
+ HANDSHAKE_F_PROTO_NOTIFY = 0,
+};
+
+typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
+
+struct compress_format {
+ unsigned char magic[2];
+ const char *name;
+ decompress_fn decompressor;
+};
+
+struct group_data {
+ int limit[21];
+ int base[20];
+ int permute[258];
+ int minLen;
+ int maxLen;
+};
+
+struct bunzip_data {
+ int writeCopies;
+ int writePos;
+ int writeRunCountdown;
+ int writeCount;
+ int writeCurrent;
+ long int (*fill)(void *, long unsigned int);
+ long int inbufCount;
+ long int inbufPos;
+ unsigned char *inbuf;
+ unsigned int inbufBitCount;
+ unsigned int inbufBits;
+ unsigned int crc32Table[256];
+ unsigned int headerCRC;
+ unsigned int totalCRC;
+ unsigned int writeCRC;
+ unsigned int *dbuf;
+ unsigned int dbufSize;
+ unsigned char selectors[32768];
+ struct group_data groups[6];
+ int io_error;
+ int byteCount[256];
+ unsigned char symToByte[256];
+ unsigned char mtfSymbol[256];
+};
+
+typedef u32 (*fallback)(u32, const unsigned char *, size_t);
+
+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 exit_boot_struct {
+ struct efi_boot_memmap *boot_memmap;
+ efi_memory_desc_t *runtime_map;
+ int runtime_entry_count;
+ void *new_fdt_addr;
+};
+
+typedef u32 bug_insn_t;
+
+enum bug_trap_type {
+ BUG_TRAP_TYPE_NONE = 0,
+ BUG_TRAP_TYPE_WARN = 1,
+ BUG_TRAP_TYPE_BUG = 2,
+};
+
+struct irqentry_state {
+ union {
+ bool exit_rcu;
+ bool lockdep;
+ };
+};
+
+typedef struct irqentry_state irqentry_state_t;
+
+typedef long int (*syscall_t)(const struct pt_regs *);
+
+struct cpu_operations {
+ int (*cpu_start)(unsigned int, struct task_struct *);
+ void (*cpu_stop)();
+ int (*cpu_is_stopped)(unsigned int);
+};
+
+enum sbi_ext_base_fid {
+ SBI_EXT_BASE_GET_SPEC_VERSION = 0,
+ SBI_EXT_BASE_GET_IMP_ID = 1,
+ SBI_EXT_BASE_GET_IMP_VERSION = 2,
+ SBI_EXT_BASE_PROBE_EXT = 3,
+ SBI_EXT_BASE_GET_MVENDORID = 4,
+ SBI_EXT_BASE_GET_MARCHID = 5,
+ SBI_EXT_BASE_GET_MIMPID = 6,
+};
+
+enum sbi_ext_time_fid {
+ SBI_EXT_TIME_SET_TIMER = 0,
+};
+
+enum sbi_ext_ipi_fid {
+ SBI_EXT_IPI_SEND_IPI = 0,
+};
+
+enum sbi_ext_rfence_fid {
+ SBI_EXT_RFENCE_REMOTE_FENCE_I = 0,
+ SBI_EXT_RFENCE_REMOTE_SFENCE_VMA = 1,
+ SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID = 2,
+ SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA_VMID = 3,
+ SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA = 4,
+ SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA_ASID = 5,
+ SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA = 6,
+};
+
+enum sbi_ext_srst_fid {
+ SBI_EXT_SRST_RESET = 0,
+};
+
+enum sbi_srst_reset_type {
+ SBI_SRST_RESET_TYPE_SHUTDOWN = 0,
+ SBI_SRST_RESET_TYPE_COLD_REBOOT = 1,
+ SBI_SRST_RESET_TYPE_WARM_REBOOT = 2,
+};
+
+enum sbi_srst_reset_reason {
+ SBI_SRST_RESET_REASON_NONE = 0,
+ SBI_SRST_RESET_REASON_SYS_FAILURE = 1,
+};
+
+enum sbi_ext_dbcn_fid {
+ SBI_EXT_DBCN_CONSOLE_WRITE = 0,
+ SBI_EXT_DBCN_CONSOLE_READ = 1,
+ SBI_EXT_DBCN_CONSOLE_WRITE_BYTE = 2,
+};
+
+typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);
+
+struct errata_info_t {
+ char name[32];
+ bool (*check_func)(long unsigned int, long unsigned int);
+};
+
+enum {
+ MAX_IORES_LEVEL = 5,
+};
+
+struct region_devres {
+ struct resource *parent;
+ resource_size_t start;
+ resource_size_t n;
+};
+
+struct multiprocess_signals {
+ sigset_t signal;
+ struct hlist_node node;
+};
+
+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_sigaction {
+ compat_uptr_t sa_handler;
+ compat_ulong_t sa_flags;
+ compat_sigset_t sa_mask;
+};
+
+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 sig_handler {
+ HANDLER_CURRENT = 0,
+ HANDLER_SIG_DFL = 1,
+ HANDLER_EXIT = 2,
+};
+
+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 pm_qos_req_action {
+ PM_QOS_ADD_REQ = 0,
+ PM_QOS_UPDATE_REQ = 1,
+ PM_QOS_REMOVE_REQ = 2,
+};
+
+struct platform_s2idle_ops {
+ int (*begin)();
+ int (*prepare)();
+ int (*prepare_late)();
+ void (*check)();
+ bool (*wake)();
+ void (*restore_early)();
+ void (*restore)();
+ void (*end)();
+};
+
+enum suspend_stat_step {
+ SUSPEND_WORKING = 0,
+ 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,
+};
+
+struct msi_dev_domain {
+ struct xarray store;
+ struct irq_domain *domain;
+};
+
+struct msi_device_data {
+ long unsigned int properties;
+ struct mutex mutex;
+ struct msi_dev_domain __domains[1];
+ long unsigned int __iter_idx;
+};
+
+struct msi_map {
+ int index;
+ int virq;
+};
+
+struct msi_ctrl {
+ unsigned int domid;
+ unsigned int first;
+ unsigned int last;
+ unsigned int nirqs;
+};
+
+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;
+};
+
+typedef struct {
+ seqcount_t seqcount;
+} seqcount_latch_t;
+
+struct latch_tree_root {
+ seqcount_latch_t seq;
+ struct rb_root tree[2];
+};
+
+enum mod_license {
+ NOT_GPL_ONLY = 0,
+ GPL_ONLY = 1,
+};
+
+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;
+};
+
+enum fail_dup_mod_reason {
+ FAIL_DUP_MOD_BECOMING = 0,
+ FAIL_DUP_MOD_LOAD = 1,
+};
+
+struct mod_tree_root {
+ struct latch_tree_root root;
+ long unsigned int addr_min;
+ long unsigned int addr_max;
+};
+
+struct symsearch {
+ const struct kernel_symbol *start;
+ const struct kernel_symbol *stop;
+ const s32 *crcs;
+ enum mod_license license;
+};
+
+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 __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 timens_offset {
+ s64 sec;
+ u64 nsec;
+};
+
+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;
+ long unsigned int 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;
+ long int last_warning;
+ int underflow_seen;
+ int overflow_seen;
+};
+
+struct arch_vdso_data {
+ __u64 all_cpu_hwprobe_values[10];
+ __u8 homogeneous_cpus;
+};
+
+struct vdso_timestamp {
+ u64 sec;
+ u64 nsec;
+};
+
+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;
+};
+
+enum {
+ FUTEX_STATE_OK = 0,
+ FUTEX_STATE_EXITING = 1,
+ FUTEX_STATE_DEAD = 2,
+};
+
+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;
+};
+
+enum pidcg_event {
+ PIDCG_MAX = 0,
+ PIDCG_FORKFAIL = 1,
+ NR_PIDCG_EVENTS = 2,
+};
+
+struct pids_cgroup {
+ struct cgroup_subsys_state css;
+ atomic64_t counter;
+ atomic64_t limit;
+ int64_t watermark;
+ struct cgroup_file events_file;
+ struct cgroup_file events_local_file;
+ atomic64_t events[2];
+ atomic64_t events_local[2];
+};
+
+struct cpu_stop_done {
+ atomic_t nr_todo;
+ int ret;
+ struct completion completion;
+};
+
+struct cpu_stopper {
+ struct task_struct *thread;
+ raw_spinlock_t lock;
+ bool enabled;
+ struct list_head works;
+ struct cpu_stop_work stop_work;
+ long unsigned int caller;
+ cpu_stop_fn_t fn;
+};
+
+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 audit_parent;
+
+struct audit_watch {
+ refcount_t count;
+ dev_t dev;
+ char *path;
+ long unsigned int ino;
+ struct audit_parent *parent;
+ struct list_head wlist;
+ struct list_head rules;
+};
+
+struct audit_parent {
+ struct list_head watches;
+ struct fsnotify_mark mark;
+};
+
+struct bpf_preload_info {
+ char link_name[16];
+ struct bpf_link *link;
+};
+
+struct bpf_preload_ops {
+ int (*preload)(struct bpf_preload_info *);
+ struct module *owner;
+};
+
+enum bpf_type {
+ BPF_TYPE_UNSPEC = 0,
+ BPF_TYPE_PROG = 1,
+ BPF_TYPE_MAP = 2,
+ BPF_TYPE_LINK = 3,
+};
+
+struct map_iter {
+ void *key;
+ bool done;
+};
+
+struct bpffs_btf_enums {
+ const struct btf *btf;
+ const struct btf_type *cmd_t;
+ const struct btf_type *map_t;
+ const struct btf_type *prog_t;
+ const struct btf_type *attach_t;
+};
+
+enum {
+ OPT_UID = 0,
+ OPT_GID = 1,
+ OPT_MODE = 2,
+ OPT_DELEGATE_CMDS = 3,
+ OPT_DELEGATE_MAPS = 4,
+ OPT_DELEGATE_PROGS = 5,
+ OPT_DELEGATE_ATTACHS = 6,
+};
+
+enum {
+ BTF_TRACING_TYPE_TASK = 0,
+ BTF_TRACING_TYPE_FILE = 1,
+ BTF_TRACING_TYPE_VMA = 2,
+ MAX_BTF_TRACING_TYPE = 3,
+};
+
+struct mmap_unlock_irq_work {
+ struct irq_work irq_work;
+ struct mm_struct *mm;
+};
+
+struct bpf_iter_seq_task_common {
+ struct pid_namespace *ns;
+ enum bpf_iter_task_type type;
+ u32 pid;
+ u32 pid_visiting;
+};
+
+struct bpf_iter_seq_task_info {
+ struct bpf_iter_seq_task_common common;
+ u32 tid;
+};
+
+struct bpf_iter__task {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct task_struct *task;
+ };
+};
+
+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_file {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct task_struct *task;
+ };
+ u32 fd;
+ union {
+ struct file *file;
+ };
+};
+
+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;
+ long unsigned int prev_vm_start;
+ long unsigned int prev_vm_end;
+};
+
+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,
+};
+
+struct bpf_iter__task_vma {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct task_struct *task;
+ };
+ union {
+ struct vm_area_struct *vma;
+ };
+};
+
+typedef u64 (*btf_bpf_find_vma)(struct task_struct *, u64, bpf_callback_t, void *, u64);
+
+struct bpf_iter_task_vma_kern_data {
+ struct task_struct *task;
+ struct mm_struct *mm;
+ struct mmap_unlock_irq_work *work;
+ struct vma_iterator vmi;
+};
+
+struct bpf_iter_task_vma {
+ __u64 __opaque[1];
+};
+
+struct bpf_iter_task_vma_kern {
+ struct bpf_iter_task_vma_kern_data *data;
+};
+
+struct bpf_iter_css_task {
+ __u64 __opaque[1];
+};
+
+struct bpf_iter_css_task_kern {
+ struct css_task_iter *css_it;
+};
+
+struct bpf_iter_task {
+ __u64 __opaque[3];
+};
+
+struct bpf_iter_task_kern {
+ struct task_struct *task;
+ struct task_struct *pos;
+ unsigned int flags;
+};
+
+enum {
+ BPF_TASK_ITER_ALL_PROCS = 0,
+ BPF_TASK_ITER_ALL_THREADS = 1,
+ BPF_TASK_ITER_PROC_THREADS = 2,
+};
+
+struct bpf_local_storage_elem {
+ struct hlist_node map_node;
+ struct hlist_node snode;
+ struct bpf_local_storage *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_stack_build_id_status {
+ BPF_STACK_BUILD_ID_EMPTY = 0,
+ BPF_STACK_BUILD_ID_VALID = 1,
+ BPF_STACK_BUILD_ID_IP = 2,
+};
+
+struct bpf_stack_build_id {
+ __s32 status;
+ unsigned char build_id[20];
+ union {
+ __u64 offset;
+ __u64 ip;
+ };
+};
+
+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 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 struct user_regs_struct 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;
+};
+
+struct stack_map_bucket {
+ struct pcpu_freelist_node fnode;
+ u32 hash;
+ u32 nr;
+ u64 data[0];
+};
+
+struct bpf_stack_map {
+ struct bpf_map map;
+ void *elems;
+ struct pcpu_freelist freelist;
+ u32 n_buckets;
+ struct stack_map_bucket *buckets[0];
+};
+
+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_stack_sleepable)(struct pt_regs *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_task_stack_sleepable)(struct task_struct *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+typedef unsigned int zap_flags_t;
+
+struct zap_details {
+ struct folio *single_folio;
+ bool even_cows;
+ zap_flags_t zap_flags;
+};
+
+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;
+ long unsigned int start;
+ long unsigned int end;
+ unsigned int flags;
+ enum mmu_notifier_event event;
+ void *owner;
+};
+
+struct contig_page_info {
+ long unsigned int free_pages;
+ long unsigned int free_blocks_total;
+ long unsigned int free_blocks_suitable;
+};
+
+struct trace_print_flags {
+ long unsigned int mask;
+ const char *name;
+};
+
+struct anon_vma_name {
+ struct kref kref;
+ char name[0];
+};
+
+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 *);
+ void (*close)(const struct vm_special_mapping *, struct vm_area_struct *);
+};
+
+struct vm_unmapped_area_info {
+ long unsigned int flags;
+ long unsigned int length;
+ long unsigned int low_limit;
+ long unsigned int high_limit;
+ long unsigned int align_mask;
+ long unsigned int align_offset;
+ long unsigned int start_gap;
+};
+
+enum {
+ HUGETLB_SHMFS_INODE = 1,
+ HUGETLB_ANONHUGE_INODE = 2,
+};
+
+struct vma_munmap_struct {
+ struct vma_iterator *vmi;
+ struct vm_area_struct *vma;
+ struct vm_area_struct *prev;
+ struct vm_area_struct *next;
+ struct list_head *uf;
+ long unsigned int start;
+ long unsigned int end;
+ long unsigned int unmap_start;
+ long unsigned int unmap_end;
+ int vma_count;
+ bool unlock;
+ bool clear_ptes;
+ long unsigned int nr_pages;
+ long unsigned int locked_vm;
+ long unsigned int nr_accounted;
+ long unsigned int exec_vm;
+ long unsigned int stack_vm;
+ long unsigned int data_vm;
+};
+
+enum vma_merge_state {
+ VMA_MERGE_START = 0,
+ VMA_MERGE_ERROR_NOMEM = 1,
+ VMA_MERGE_NOMERGE = 2,
+ VMA_MERGE_SUCCESS = 3,
+};
+
+enum vma_merge_flags {
+ VMG_FLAG_DEFAULT = 0,
+ VMG_FLAG_JUST_EXPAND = 1,
+};
+
+struct vma_merge_struct {
+ struct mm_struct *mm;
+ struct vma_iterator *vmi;
+ long unsigned int pgoff;
+ struct vm_area_struct *prev;
+ struct vm_area_struct *next;
+ struct vm_area_struct *vma;
+ long unsigned int start;
+ long unsigned int end;
+ long unsigned int flags;
+ struct file *file;
+ struct anon_vma *anon_vma;
+ struct mempolicy *policy;
+ struct vm_userfaultfd_ctx uffd_ctx;
+ struct anon_vma_name *anon_name;
+ enum vma_merge_flags merge_flags;
+ enum vma_merge_state state;
+};
+
+struct page_frag_cache {
+ void *va;
+ __u16 offset;
+ __u16 size;
+ unsigned int pagecnt_bias;
+ bool pfmemalloc;
+};
+
+enum meminit_context {
+ MEMINIT_EARLY = 0,
+ MEMINIT_HOTPLUG = 1,
+};
+
+typedef int fpi_t;
+
+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,
+};
+
+enum lru_status {
+ LRU_REMOVED = 0,
+ LRU_REMOVED_RETRY = 1,
+ LRU_ROTATE = 2,
+ LRU_SKIP = 3,
+ LRU_RETRY = 4,
+ LRU_STOP = 5,
+};
+
+typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
+
+struct inodes_stat_t {
+ long int nr_inodes;
+ long int nr_unused;
+ long int dummy[5];
+};
+
+typedef int class_get_unused_fd_t;
+
+typedef struct ns_common *ns_get_path_helper_t(void *);
+
+struct mnt_ns_info {
+ __u32 size;
+ __u32 nr_mounts;
+ __u64 mnt_ns_id;
+};
+
+struct ns_get_path_task_args {
+ const struct proc_ns_operations *ns_ops;
+ struct task_struct *task;
+};
+
+struct eventfd_ctx {
+ struct kref kref;
+ wait_queue_head_t wqh;
+ __u64 count;
+ unsigned int flags;
+ int id;
+};
+
+struct posix_acl_xattr_entry {
+ __le16 e_tag;
+ __le16 e_perm;
+ __le32 e_id;
+};
+
+struct posix_acl_xattr_header {
+ __le32 a_version;
+};
+
+struct iomap_swapfile_info {
+ struct iomap iomap;
+ struct swap_info_struct *sis;
+ uint64_t lowest_ppage;
+ uint64_t highest_ppage;
+ long unsigned int nr_pages;
+ int nr_extents;
+ struct file *file;
+};
+
+enum SHIFT_DIRECTION {
+ SHIFT_LEFT = 0,
+ SHIFT_RIGHT = 1,
+};
+
+struct ext4_extent_tail {
+ __le32 et_checksum;
+};
+
+struct partial_cluster {
+ ext4_fsblk_t pclu;
+ ext4_lblk_t lblk;
+ enum {
+ initial = 0,
+ tofree = 1,
+ nofree = 2,
+ } state;
+};
+
+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;
+};
+
+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;
+ long unsigned int e_flags;
+ u64 e_value;
+};
+
+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_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_xattr_block_find {
+ struct ext4_xattr_search s;
+ struct buffer_head *bh;
+};
+
+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 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;
+ long long unsigned int blocknr;
+};
+
+struct nlmclnt_initdata {
+ const char *hostname;
+ const struct sockaddr *address;
+ size_t addrlen;
+ short unsigned int protocol;
+ u32 nfs_version;
+ int noresvport;
+ struct net *net;
+ const struct nlmclnt_operations *nlmclnt_ops;
+ const struct cred *cred;
+};
+
+enum {
+ FILEID_HIGH_OFF = 0,
+ FILEID_LOW_OFF = 1,
+ FILE_I_TYPE_OFF = 2,
+ EMBED_FH_OFF = 3,
+};
+
+enum nfs3_createmode {
+ NFS3_CREATE_UNCHECKED = 0,
+ NFS3_CREATE_GUARDED = 1,
+ NFS3_CREATE_EXCLUSIVE = 2,
+};
+
+enum nfs3_ftype {
+ NF3NON = 0,
+ NF3REG = 1,
+ NF3DIR = 2,
+ NF3BLK = 3,
+ NF3CHR = 4,
+ NF3LNK = 5,
+ NF3SOCK = 6,
+ NF3FIFO = 7,
+ NF3BAD = 8,
+};
+
+struct nfs3_sattrargs {
+ struct nfs_fh *fh;
+ struct iattr *sattr;
+ unsigned int guard;
+ struct timespec64 guardtime;
+};
+
+struct nfs3_diropargs {
+ struct nfs_fh *fh;
+ const char *name;
+ unsigned int len;
+};
+
+struct nfs3_accessargs {
+ struct nfs_fh *fh;
+ __u32 access;
+};
+
+struct nfs3_createargs {
+ struct nfs_fh *fh;
+ const char *name;
+ unsigned int len;
+ struct iattr *sattr;
+ enum nfs3_createmode createmode;
+ __be32 verifier[2];
+};
+
+struct nfs3_mkdirargs {
+ struct nfs_fh *fh;
+ const char *name;
+ unsigned int len;
+ struct iattr *sattr;
+};
+
+struct nfs3_symlinkargs {
+ struct nfs_fh *fromfh;
+ const char *fromname;
+ unsigned int fromlen;
+ struct page **pages;
+ unsigned int pathlen;
+ struct iattr *sattr;
+};
+
+struct nfs3_mknodargs {
+ struct nfs_fh *fh;
+ const char *name;
+ unsigned int len;
+ enum nfs3_ftype type;
+ struct iattr *sattr;
+ dev_t rdev;
+};
+
+struct nfs3_linkargs {
+ struct nfs_fh *fromfh;
+ struct nfs_fh *tofh;
+ const char *toname;
+ unsigned int tolen;
+};
+
+struct nfs3_readdirargs {
+ struct nfs_fh *fh;
+ __u64 cookie;
+ __be32 verf[2];
+ bool plus;
+ unsigned int count;
+ struct page **pages;
+};
+
+struct nfs3_diropres {
+ struct nfs_fattr *dir_attr;
+ struct nfs_fh *fh;
+ struct nfs_fattr *fattr;
+};
+
+struct nfs3_accessres {
+ struct nfs_fattr *fattr;
+ __u32 access;
+};
+
+struct nfs3_readlinkargs {
+ struct nfs_fh *fh;
+ unsigned int pgbase;
+ unsigned int pglen;
+ struct page **pages;
+};
+
+struct nfs3_linkres {
+ struct nfs_fattr *dir_attr;
+ struct nfs_fattr *fattr;
+};
+
+struct nfs3_readdirres {
+ struct nfs_fattr *dir_attr;
+ __be32 *verf;
+ bool plus;
+};
+
+struct rpc_pipe_dir_object_ops;
+
+struct rpc_pipe_dir_object {
+ struct list_head pdo_head;
+ const struct rpc_pipe_dir_object_ops *pdo_ops;
+ void *pdo_data;
+};
+
+struct rpc_pipe_dir_object_ops {
+ int (*create)(struct dentry *, struct rpc_pipe_dir_object *);
+ void (*destroy)(struct dentry *, struct rpc_pipe_dir_object *);
+};
+
+struct rpc_inode {
+ struct inode vfs_inode;
+ void *private;
+ struct rpc_pipe *pipe;
+ wait_queue_head_t waitq;
+};
+
+struct idmap_legacy_upcalldata;
+
+struct idmap {
+ struct rpc_pipe_dir_object idmap_pdo;
+ struct rpc_pipe *idmap_pipe;
+ struct idmap_legacy_upcalldata *idmap_upcall_data;
+ struct mutex idmap_mutex;
+ struct user_namespace *user_ns;
+};
+
+struct idmap_msg {
+ __u8 im_type;
+ __u8 im_conv;
+ char im_name[128];
+ __u32 im_id;
+ __u8 im_status;
+};
+
+struct idmap_legacy_upcalldata {
+ struct rpc_pipe_msg pipe_msg;
+ struct idmap_msg idmap_msg;
+ struct key *authkey;
+ struct idmap *idmap;
+};
+
+enum {
+ Opt_find_uid = 0,
+ Opt_find_gid = 1,
+ Opt_find_user = 2,
+ Opt_find_group = 3,
+ Opt_find_err = 4,
+};
+
+enum data_content4 {
+ NFS4_CONTENT_DATA = 0,
+ NFS4_CONTENT_HOLE = 1,
+};
+
+struct nfs42_netaddr {
+ char netid[5];
+ char addr[58];
+ u32 netid_len;
+ u32 addr_len;
+};
+
+enum netloc_type4 {
+ NL4_NAME = 1,
+ NL4_URL = 2,
+ NL4_NETADDR = 3,
+};
+
+struct nl4_server {
+ enum netloc_type4 nl4_type;
+ union {
+ struct {
+ int nl4_str_sz;
+ char nl4_str[1025];
+ };
+ struct nfs42_netaddr nl4_addr;
+ } u;
+};
+
+struct nfs42_layoutstat_res {
+ struct nfs4_sequence_res seq_res;
+ int num_dev;
+ int rpc_status;
+};
+
+struct nfs42_layoutstat_data {
+ struct inode *inode;
+ struct nfs42_layoutstat_args args;
+ struct nfs42_layoutstat_res res;
+};
+
+struct nfs42_layouterror_args {
+ struct nfs4_sequence_args seq_args;
+ struct inode *inode;
+ unsigned int num_errors;
+ struct nfs42_layout_error errors[5];
+};
+
+struct nfs42_layouterror_res {
+ struct nfs4_sequence_res seq_res;
+ unsigned int num_errors;
+ int rpc_status;
+};
+
+struct nfs42_layouterror_data {
+ struct nfs42_layouterror_args args;
+ struct nfs42_layouterror_res res;
+ struct inode *inode;
+ struct pnfs_layout_segment *lseg;
+};
+
+struct nfs42_clone_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *src_fh;
+ struct nfs_fh *dst_fh;
+ nfs4_stateid src_stateid;
+ nfs4_stateid dst_stateid;
+ __u64 src_offset;
+ __u64 dst_offset;
+ __u64 count;
+ const u32 *dst_bitmask;
+};
+
+struct nfs42_clone_res {
+ struct nfs4_sequence_res seq_res;
+ unsigned int rpc_status;
+ struct nfs_fattr *dst_fattr;
+ const struct nfs_server *server;
+};
+
+struct nfs42_falloc_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *falloc_fh;
+ nfs4_stateid falloc_stateid;
+ u64 falloc_offset;
+ u64 falloc_length;
+ const u32 *falloc_bitmask;
+};
+
+struct nfs42_falloc_res {
+ struct nfs4_sequence_res seq_res;
+ unsigned int status;
+ struct nfs_fattr *falloc_fattr;
+ const struct nfs_server *falloc_server;
+};
+
+struct nfs42_copy_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *src_fh;
+ nfs4_stateid src_stateid;
+ u64 src_pos;
+ struct nfs_fh *dst_fh;
+ nfs4_stateid dst_stateid;
+ u64 dst_pos;
+ u64 count;
+ bool sync;
+ struct nl4_server *cp_src;
+};
+
+struct nfs42_write_res {
+ nfs4_stateid stateid;
+ u64 count;
+ struct nfs_writeverf verifier;
+};
+
+struct nfs42_copy_res {
+ struct nfs4_sequence_res seq_res;
+ struct nfs42_write_res write_res;
+ bool consecutive;
+ bool synchronous;
+ struct nfs_commitres commit_res;
+};
+
+struct nfs42_offload_status_args {
+ struct nfs4_sequence_args osa_seq_args;
+ struct nfs_fh *osa_src_fh;
+ nfs4_stateid osa_stateid;
+};
+
+struct nfs42_offload_status_res {
+ struct nfs4_sequence_res osr_seq_res;
+ uint64_t osr_count;
+ int osr_status;
+};
+
+struct nfs42_copy_notify_args {
+ struct nfs4_sequence_args cna_seq_args;
+ struct nfs_fh *cna_src_fh;
+ nfs4_stateid cna_src_stateid;
+ struct nl4_server cna_dst;
+};
+
+struct nfs42_copy_notify_res {
+ struct nfs4_sequence_res cnr_seq_res;
+ struct nfstime4 cnr_lease_time;
+ nfs4_stateid cnr_stateid;
+ struct nl4_server cnr_src;
+};
+
+struct nfs42_seek_args {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *sa_fh;
+ nfs4_stateid sa_stateid;
+ u64 sa_offset;
+ u32 sa_what;
+};
+
+struct nfs42_seek_res {
+ struct nfs4_sequence_res seq_res;
+ unsigned int status;
+ u32 sr_eof;
+ u64 sr_offset;
+};
+
+struct nfs42_setxattrargs {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ const u32 *bitmask;
+ const char *xattr_name;
+ u32 xattr_flags;
+ size_t xattr_len;
+ struct page **xattr_pages;
+};
+
+struct nfs42_setxattrres {
+ struct nfs4_sequence_res seq_res;
+ struct nfs4_change_info cinfo;
+ struct nfs_fattr *fattr;
+ const struct nfs_server *server;
+};
+
+struct nfs42_getxattrargs {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ const char *xattr_name;
+ size_t xattr_len;
+ struct page **xattr_pages;
+};
+
+struct nfs42_getxattrres {
+ struct nfs4_sequence_res seq_res;
+ size_t xattr_len;
+};
+
+struct nfs42_listxattrsargs {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ u32 count;
+ u64 cookie;
+ struct page **xattr_pages;
+};
+
+struct nfs42_listxattrsres {
+ struct nfs4_sequence_res seq_res;
+ struct page *scratch;
+ void *xattr_buf;
+ size_t xattr_len;
+ u64 cookie;
+ bool eof;
+ size_t copied;
+};
+
+struct nfs42_removexattrargs {
+ struct nfs4_sequence_args seq_args;
+ struct nfs_fh *fh;
+ const char *xattr_name;
+};
+
+struct nfs42_removexattrres {
+ struct nfs4_sequence_res seq_res;
+ struct nfs4_change_info cinfo;
+};
+
+struct nfs4_copy_state {
+ struct list_head copies;
+ struct list_head src_copies;
+ nfs4_stateid stateid;
+ struct completion completion;
+ uint64_t count;
+ struct nfs_writeverf verf;
+ int error;
+ int flags;
+ struct nfs4_state *parent_src_state;
+ struct nfs4_state *parent_dst_state;
+};
+
+struct nfs42_offloadcancel_data {
+ struct nfs_server *seq_server;
+ struct nfs42_offload_status_args args;
+ struct nfs42_offload_status_res res;
+};
+
+enum dentry_d_lock_class {
+ DENTRY_D_LOCK_NORMAL = 0,
+ DENTRY_D_LOCK_NESTED = 1,
+};
+
+struct msg_msgseg {
+ struct msg_msgseg *next;
+};
+
+struct assoc_array_ops {
+ long unsigned int (*get_key_chunk)(const void *, int);
+ long unsigned int (*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_node {
+ struct assoc_array_ptr *back_pointer;
+ u8 parent_slot;
+ struct assoc_array_ptr *slots[16];
+ long unsigned int nr_leaves_on_branch;
+};
+
+struct assoc_array_shortcut {
+ struct assoc_array_ptr *back_pointer;
+ int parent_slot;
+ int skip_to_level;
+ struct assoc_array_ptr *next_node;
+ long unsigned int index_key[0];
+};
+
+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 int 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_read_iterator_context {
+ size_t buflen;
+ size_t count;
+ key_serial_t *buffer;
+};
+
+struct nlmsg_perm {
+ u16 nlmsg_type;
+ u32 perm;
+};
+
+enum {
+ KERNEL_PARAM_OPS_FL_NOARG = 1,
+};
+
+struct aa_file_ctx {
+ spinlock_t lock;
+ struct aa_label *label;
+ u32 allow;
+};
+
+union aa_buffer {
+ struct list_head list;
+ struct {
+ struct {} __empty_buffer;
+ char buffer[0];
+ };
+};
+
+struct aa_local_cache {
+ unsigned int hold;
+ unsigned int count;
+ struct list_head head;
+};
+
+struct rtattr {
+ short unsigned int rta_len;
+ short unsigned int rta_type;
+};
+
+struct crypto_queue {
+ struct list_head list;
+ struct list_head *backlog;
+ unsigned int qlen;
+ unsigned int max_qlen;
+};
+
+struct crypto_attr_alg {
+ char name[128];
+};
+
+struct crypto_attr_type {
+ u32 type;
+ u32 mask;
+};
+
+enum {
+ CRYPTOA_UNSPEC = 0,
+ CRYPTOA_ALG = 1,
+ CRYPTOA_TYPE = 2,
+ __CRYPTOA_MAX = 3,
+};
+
+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 crypto_kpp {
+ unsigned int reqsize;
+ struct crypto_tfm base;
+};
+
+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 kpp_instance {
+ void (*free)(struct kpp_instance *);
+ union {
+ struct {
+ char head[48];
+ struct crypto_instance base;
+ } s;
+ struct kpp_alg alg;
+ };
+};
+
+struct crypto_kpp_spawn {
+ struct crypto_spawn base;
+};
+
+struct sockaddr_alg_new {
+ __u16 salg_family;
+ __u8 salg_type[14];
+ __u32 salg_feat;
+ __u32 salg_mask;
+ __u8 salg_name[0];
+};
+
+struct af_alg_iv {
+ __u32 ivlen;
+ __u8 iv[0];
+};
+
+struct af_alg_control {
+ struct af_alg_iv *iv;
+ int op;
+ unsigned int aead_assoclen;
+};
+
+struct af_alg_tsgl {
+ struct list_head list;
+ unsigned int cur;
+ struct scatterlist sg[0];
+};
+
+struct af_alg_rsgl {
+ struct af_alg_sgl sgl;
+ struct list_head list;
+ size_t sg_num_bytes;
+};
+
+struct af_alg_async_req {
+ struct kiocb *iocb;
+ struct sock *sk;
+ struct af_alg_rsgl first_rsgl;
+ struct af_alg_rsgl *last_rsgl;
+ struct list_head rsgl_list;
+ struct scatterlist *tsgl;
+ unsigned int tsgl_entries;
+ unsigned int outlen;
+ unsigned int areqlen;
+ union {
+ struct aead_request aead_req;
+ struct skcipher_request skcipher_req;
+ } cra_u;
+};
+
+struct af_alg_ctx {
+ struct list_head tsgl_list;
+ void *iv;
+ void *state;
+ size_t aead_assoclen;
+ struct crypto_wait wait;
+ size_t used;
+ atomic_t rcvused;
+ bool more;
+ bool merge;
+ bool enc;
+ bool init;
+ unsigned int len;
+ unsigned int inflight;
+};
+
+enum tpm_duration {
+ TPM_SHORT = 0,
+ TPM_MEDIUM = 1,
+ TPM_LONG = 2,
+ TPM_LONG_LONG = 3,
+ TPM_UNDEFINED = 4,
+ TPM_NUM_DURATIONS = 4,
+};
+
+struct alg_type_list {
+ const struct af_alg_type *type;
+ struct list_head list;
+};
+
+enum bio_merge_status {
+ BIO_MERGE_OK = 0,
+ BIO_MERGE_NONE = 1,
+ BIO_MERGE_FAILED = 2,
+};
+
+struct blkpg_ioctl_arg {
+ int op;
+ int flags;
+ int datalen;
+ void *data;
+};
+
+struct blkpg_partition {
+ long long int start;
+ long long int length;
+ int pno;
+ char devname[64];
+ char volname[64];
+};
+
+struct pr_reservation {
+ __u64 key;
+ __u32 type;
+ __u32 flags;
+};
+
+struct pr_registration {
+ __u64 old_key;
+ __u64 new_key;
+ __u32 flags;
+ __u32 __pad;
+};
+
+struct pr_preempt {
+ __u64 old_key;
+ __u64 new_key;
+ __u32 type;
+ __u32 flags;
+};
+
+struct pr_clear {
+ __u64 key;
+ __u32 flags;
+ __u32 __pad;
+};
+
+struct pr_keys {
+ u32 generation;
+ u32 num_keys;
+ u64 keys[0];
+};
+
+struct pr_held_reservation {
+ u64 key;
+ u32 generation;
+ enum pr_type type;
+};
+
+struct compat_blkpg_ioctl_arg {
+ compat_int_t op;
+ compat_int_t flags;
+ compat_int_t datalen;
+ compat_caddr_t data;
+};
+
+struct compat_hd_geometry {
+ unsigned char heads;
+ unsigned char sectors;
+ short unsigned int cylinders;
+ u32 start;
+};
+
+struct blk_iou_cmd {
+ int res;
+ bool nowait;
+};
+
+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 int poll_msecs;
+ struct delayed_work dwork;
+};
+
+typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
+
+enum {
+ KYBER_READ = 0,
+ KYBER_WRITE = 1,
+ KYBER_DISCARD = 2,
+ KYBER_OTHER = 3,
+ KYBER_NUM_DOMAINS = 4,
+};
+
+enum {
+ KYBER_ASYNC_PERCENT = 75,
+};
+
+enum {
+ KYBER_LATENCY_SHIFT = 2,
+ KYBER_GOOD_BUCKETS = 4,
+ KYBER_LATENCY_BUCKETS = 8,
+};
+
+enum {
+ KYBER_TOTAL_LATENCY = 0,
+ KYBER_IO_LATENCY = 1,
+};
+
+struct kyber_cpu_latency {
+ atomic_t buckets[48];
+};
+
+struct kyber_ctx_queue {
+ spinlock_t lock;
+ struct list_head rq_list[4];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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 *cpu_latency;
+ struct timer_list timer;
+ unsigned int latency_buckets[48];
+ long unsigned int latency_timeout[3];
+ int domain_p99[3];
+ u64 latency_targets[3];
+};
+
+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 bd_holder_disk {
+ struct list_head list;
+ struct kobject *holder_dir;
+ int refcnt;
+};
+
+struct io_ev_fd {
+ struct eventfd_ctx *cq_ev_fd;
+ unsigned int eventfd_async: 1;
+ struct callback_head rcu;
+ refcount_t refs;
+ atomic_t ops;
+};
+
+enum {
+ IO_EVENTFD_OP_SIGNAL_BIT = 0,
+};
+
+struct io_nop {
+ struct file *file;
+ int result;
+};
+
+struct io_fadvise {
+ struct file *file;
+ u64 offset;
+ u64 len;
+ u32 advice;
+};
+
+struct io_madvise {
+ struct file *file;
+ u64 addr;
+ u64 len;
+ u32 advice;
+};
+
+struct io_ftrunc {
+ struct file *file;
+ loff_t len;
+};
+
+struct rhltable {
+ struct rhashtable ht;
+};
+
+union nested_table {
+ union nested_table *table;
+ struct rhash_lock_head *bucket;
+};
+
+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 void sha256_block_fn(struct sha256_state *, const u8 *, int);
+
+union uu {
+ short unsigned int us;
+ unsigned char b[2];
+};
+
+typedef unsigned int uInt;
+
+typedef struct {
+ const uint8_t *externalDict;
+ size_t extDictSize;
+ const uint8_t *prefixEnd;
+ size_t prefixSize;
+} LZ4_streamDecode_t_internal;
+
+typedef union {
+ long long unsigned int table[4];
+ LZ4_streamDecode_t_internal internal_donotuse;
+} LZ4_streamDecode_t;
+
+typedef uintptr_t uptrval;
+
+typedef enum {
+ noDict = 0,
+ withPrefix64k = 1,
+ usingExtDict = 2,
+} dict_directive;
+
+typedef enum {
+ endOnOutputSize = 0,
+ endOnInputSize = 1,
+} endCondition_directive;
+
+typedef enum {
+ decode_full_block = 0,
+ partial_decode = 1,
+} earlyEnd_directive;
+
+typedef ZSTD_DCtx ZSTD_DStream;
+
+struct ZSTD_DDict_s {
+ void *dictBuffer;
+ const void *dictContent;
+ size_t dictSize;
+ ZSTD_entropyDTables_t entropy;
+ U32 dictID;
+ U32 entropyPresent;
+ ZSTD_customMem cMem;
+};
+
+typedef ZSTD_ErrorCode zstd_error_code;
+
+typedef ZSTD_customMem zstd_custom_mem;
+
+typedef ZSTD_DDict zstd_ddict;
+
+typedef ZSTD_inBuffer zstd_in_buffer;
+
+typedef ZSTD_outBuffer zstd_out_buffer;
+
+typedef ZSTD_DStream zstd_dstream;
+
+typedef ZSTD_frameHeader zstd_frame_header;
+
+struct font_data {
+ unsigned int extra[4];
+ const unsigned char data[0];
+};
+
+struct riscv_cacheinfo_ops {
+ const struct attribute_group * (*get_priv_group)(struct cacheinfo *);
+};
+
+enum {
+ DIR_CORR = 0,
+ DATA_CORR = 1,
+ DATA_UNCORR = 2,
+ DIR_UNCORR = 3,
+};
+
+enum {
+ QUIRK_NONSTANDARD_CACHE_OPS = 1,
+ QUIRK_BROKEN_DATA_UNCORR = 2,
+};
+
+struct plic_priv {
+ struct fwnode_handle *fwnode;
+ struct cpumask lmask;
+ struct irq_domain *irqdomain;
+ void *regs;
+ long unsigned int plic_quirks;
+ unsigned int nr_irqs;
+ long unsigned int *prio_save;
+ u32 gsi_base;
+ int acpi_plic_id;
+};
+
+struct plic_handler {
+ bool present;
+ void *hart_base;
+ raw_spinlock_t enable_lock;
+ void *enable_base;
+ u32 *enable_save;
+ struct plic_priv *priv;
+};
+
+struct pingroup {
+ const char *name;
+ const unsigned int *pins;
+ size_t npins;
+};
+
+struct group_desc {
+ struct pingroup grp;
+ void *data;
+};
+
+struct cv1800_pinctrl {
+ struct device *dev;
+ struct pinctrl_dev *pctl_dev;
+ const struct cv1800_pinctrl_data *data;
+ struct pinctrl_desc pdesc;
+ u32 *power_cfg;
+ struct mutex mutex;
+ raw_spinlock_t lock;
+ void *regs[2];
+};
+
+struct cv1800_pin_mux_config {
+ struct cv1800_pin *pin;
+ u32 config;
+};
+
+enum sunxi_desc_bias_voltage {
+ BIAS_VOLTAGE_NONE = 0,
+ BIAS_VOLTAGE_GRP_CONFIG = 1,
+ BIAS_VOLTAGE_PIO_POW_MODE_SEL = 2,
+ BIAS_VOLTAGE_PIO_POW_MODE_CTL = 3,
+};
+
+struct sunxi_desc_function {
+ long unsigned int variant;
+ const char *name;
+ u8 muxval;
+ u8 irqbank;
+ u8 irqnum;
+};
+
+struct sunxi_desc_pin {
+ struct pinctrl_pin_desc pin;
+ long unsigned int variant;
+ struct sunxi_desc_function *functions;
+};
+
+struct sunxi_pinctrl_desc {
+ const struct sunxi_desc_pin *pins;
+ int npins;
+ unsigned int pin_base;
+ unsigned int irq_banks;
+ const unsigned int *irq_bank_map;
+ bool irq_read_needs_mux;
+ bool disable_strict_mode;
+ enum sunxi_desc_bias_voltage io_bias_cfg_variant;
+};
+
+struct sunxi_pinctrl_function {
+ const char *name;
+ const char **groups;
+ unsigned int ngroups;
+};
+
+struct sunxi_pinctrl_group {
+ const char *name;
+ unsigned int pin;
+};
+
+struct sunxi_pinctrl_regulator {
+ struct regulator *regulator;
+ refcount_t refcount;
+};
+
+struct sunxi_pinctrl {
+ void *membase;
+ struct gpio_chip *chip;
+ const struct sunxi_pinctrl_desc *desc;
+ struct device *dev;
+ struct sunxi_pinctrl_regulator regulators[9];
+ struct irq_domain *domain;
+ struct sunxi_pinctrl_function *functions;
+ unsigned int nfunctions;
+ struct sunxi_pinctrl_group *groups;
+ unsigned int ngroups;
+ int *irq;
+ unsigned int *irq_array;
+ raw_spinlock_t lock;
+ struct pinctrl_dev *pctl_dev;
+ long unsigned int variant;
+ u32 bank_mem_size;
+ u32 pull_regs_offset;
+ u32 dlevel_field_width;
+};
+
+struct sifive_gpio {
+ void *base;
+ struct gpio_chip gc;
+ struct regmap *regs;
+ long unsigned int irq_state;
+ unsigned int trigger[32];
+ unsigned int irq_number[32];
+};
+
+enum pci_mmap_state {
+ pci_mmap_io = 0,
+ pci_mmap_mem = 1,
+};
+
+enum pci_mmap_api {
+ PCI_MMAP_SYSFS = 0,
+ PCI_MMAP_PROCFS = 1,
+};
+
+struct pcie_pme_service_data {
+ spinlock_t lock;
+ struct pcie_device *srv;
+ struct work_struct work;
+ bool noirq;
+};
+
+enum v4l2_preemphasis {
+ V4L2_PREEMPHASIS_DISABLED = 0,
+ V4L2_PREEMPHASIS_50_uS = 1,
+ V4L2_PREEMPHASIS_75_uS = 2,
+};
+
+enum v4l2_av1_segment_feature {
+ V4L2_AV1_SEG_LVL_ALT_Q = 0,
+ V4L2_AV1_SEG_LVL_ALT_LF_Y_V = 1,
+ V4L2_AV1_SEG_LVL_REF_FRAME = 5,
+ V4L2_AV1_SEG_LVL_REF_SKIP = 6,
+ V4L2_AV1_SEG_LVL_REF_GLOBALMV = 7,
+ V4L2_AV1_SEG_LVL_MAX = 8,
+};
+
+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 crs_csi2_connection {
+ struct list_head entry;
+ struct acpi_resource_csi2_serialbus csi2_data;
+ acpi_handle remote_handle;
+ char remote_name[0];
+};
+
+struct crs_csi2 {
+ struct list_head entry;
+ acpi_handle handle;
+ struct acpi_device_software_nodes *swnodes;
+ struct list_head connections;
+ u32 port_count;
+};
+
+struct csi2_resources_walk_data {
+ acpi_handle handle;
+ struct list_head connections;
+};
+
+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_table_attr {
+ struct bin_attribute attr;
+ char name[4];
+ int instance;
+ char filename[8];
+ struct list_head node;
+};
+
+struct acpi_data_attr {
+ struct bin_attribute attr;
+ u64 addr;
+};
+
+struct acpi_data_obj {
+ char *name;
+ int (*fn)(void *, struct acpi_data_attr *);
+};
+
+struct event_counter {
+ u32 count;
+ u32 flags;
+};
+
+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;
+};
+
+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,
+};
+
+struct acpi_get_devices_info {
+ acpi_walk_callback user_function;
+ void *context;
+ const char *hid;
+};
+
+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,
+};
+
+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_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,
+};
+
+struct acpi_battery_hook {
+ const char *name;
+ int (*add_battery)(struct power_supply *, struct acpi_battery_hook *);
+ int (*remove_battery)(struct power_supply *, struct acpi_battery_hook *);
+ struct list_head list;
+};
+
+enum {
+ ACPI_BATTERY_ALARM_PRESENT = 0,
+ ACPI_BATTERY_XINFO_PRESENT = 1,
+ ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY = 2,
+ ACPI_BATTERY_QUIRK_THINKPAD_MAH = 3,
+ ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE = 4,
+};
+
+struct acpi_battery {
+ struct mutex lock;
+ struct mutex sysfs_lock;
+ struct power_supply *bat;
+ struct power_supply_desc bat_desc;
+ struct acpi_device *device;
+ struct notifier_block pm_nb;
+ struct list_head list;
+ long unsigned int update_time;
+ int revision;
+ int rate_now;
+ int capacity_now;
+ int voltage_now;
+ int design_capacity;
+ int full_charge_capacity;
+ int technology;
+ int design_voltage;
+ int design_capacity_warning;
+ int design_capacity_low;
+ int cycle_count;
+ int measurement_accuracy;
+ int max_sampling_time;
+ int min_sampling_time;
+ int max_averaging_interval;
+ int min_averaging_interval;
+ int capacity_granularity_1;
+ int capacity_granularity_2;
+ int alarm;
+ char model_number[64];
+ char serial_number[64];
+ char type[64];
+ char oem_info[64];
+ int state;
+ int power_unit;
+ long unsigned int flags;
+};
+
+struct acpi_offsets {
+ size_t offset;
+ u8 mode;
+};
+
+struct clk_notifier {
+ struct clk *clk;
+ struct srcu_notifier_head notifier_head;
+ struct list_head node;
+};
+
+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;
+ long unsigned int rate;
+ long unsigned int req_rate;
+ long unsigned int new_rate;
+ struct clk_core *new_parent;
+ struct clk_core *new_child;
+ long unsigned int flags;
+ bool orphan;
+ bool rpm_enabled;
+ unsigned int enable_count;
+ unsigned int prepare_count;
+ unsigned int protect_count;
+ long unsigned int min_rate;
+ long unsigned int max_rate;
+ long unsigned int 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_onecell_data {
+ struct clk **clks;
+ unsigned int clk_num;
+};
+
+struct clk_parent_map {
+ const struct clk_hw *hw;
+ struct clk_core *core;
+ const char *fw_name;
+ const char *name;
+ int index;
+};
+
+struct clk_notifier_devres {
+ struct clk *clk;
+ struct notifier_block *nb;
+};
+
+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 __prci_data {
+ void *va;
+ struct reset_simple_data reset;
+ struct clk_hw_onecell_data hw_clks;
+};
+
+struct __prci_wrpll_data {
+ struct wrpll_cfg c;
+ void (*enable_bypass)(struct __prci_data *);
+ void (*disable_bypass)(struct __prci_data *);
+ u8 cfg0_offs;
+ u8 cfg1_offs;
+};
+
+struct __prci_clock {
+ const char *name;
+ const char *parent_name;
+ const struct clk_ops *ops;
+ struct clk_hw hw;
+ struct __prci_wrpll_data *pwd;
+ struct __prci_data *pd;
+};
+
+struct prci_clk_desc {
+ struct __prci_clock *clks;
+ size_t num_clks;
+};
+
+struct debugfs_reg32 {
+ char *name;
+ long unsigned int offset;
+};
+
+struct debugfs_regset32 {
+ const struct debugfs_reg32 *regs;
+ int nregs;
+ void *base;
+ struct device *dev;
+};
+
+struct ccu_mux___2 {
+ u32 enable;
+ struct ccu_mux_internal mux;
+ struct ccu_common common;
+};
+
+struct ccu_mux_nb {
+ struct notifier_block clk_nb;
+ struct ccu_common *common;
+ struct ccu_mux_internal *cm;
+ u32 delay_us;
+ u8 bypass_index;
+ u8 original_index;
+};
+
+struct ccu_phase {
+ u8 shift;
+ u8 width;
+ struct ccu_common common;
+};
+
+struct ccu_div___2 {
+ u32 enable;
+ struct ccu_div_internal___2 div;
+ struct ccu_mux_internal mux;
+ struct ccu_common common;
+ unsigned int fixed_post_div;
+};
+
+struct ccu_gate___2 {
+ u32 enable;
+ struct ccu_common common;
+};
+
+struct ccu_mult {
+ u32 enable;
+ u32 lock;
+ struct ccu_frac_internal frac;
+ struct ccu_mult_internal mult;
+ struct ccu_mux_internal mux;
+ struct ccu_common common;
+};
+
+struct ccu_nkmp {
+ u32 enable;
+ u32 lock;
+ struct ccu_mult_internal n;
+ struct ccu_mult_internal k;
+ struct ccu_div_internal___2 m;
+ struct ccu_div_internal___2 p;
+ unsigned int fixed_post_div;
+ unsigned int max_rate;
+ struct ccu_common common;
+};
+
+struct sunxi_sram_func {
+ char *func;
+ u8 val;
+ u32 reg_val;
+};
+
+struct sunxi_sram_data {
+ char *name;
+ u8 reg;
+ u8 offset;
+ u8 width;
+ struct sunxi_sram_func *func;
+};
+
+struct sunxi_sram_desc {
+ struct sunxi_sram_data data;
+ bool claimed;
+};
+
+struct sunxi_sramc_variant {
+ int num_emac_clocks;
+ bool has_ldo_ctrl;
+ bool has_ths_offset;
+};
+
+struct fixed_voltage_data {
+ struct regulator_desc desc;
+ struct regulator_dev *dev;
+ struct clk *enable_clock;
+ unsigned int enable_counter;
+ int performance_state;
+};
+
+struct fixed_dev_type {
+ bool has_enable_clock;
+ bool has_performance_state;
+};
+
+struct ldsem_waiter {
+ struct list_head list;
+ struct task_struct *task;
+};
+
+struct tiocl_selection {
+ short unsigned int xs;
+ short unsigned int ys;
+ short unsigned int xe;
+ short unsigned int ye;
+ short unsigned int sel_mode;
+};
+
+struct vc_selection {
+ struct mutex lock;
+ struct vc_data *cons;
+ char *buffer;
+ unsigned int buf_len;
+ volatile int start;
+ int end;
+};
+
+struct irq_info {
+ struct hlist_node node;
+ int irq;
+ spinlock_t lock;
+ struct list_head *head;
+};
+
+enum cti_port_type {
+ CTI_PORT_TYPE_NONE = 0,
+ CTI_PORT_TYPE_RS232 = 1,
+ CTI_PORT_TYPE_RS422_485 = 2,
+ CTI_PORT_TYPE_RS232_422_485_HW = 3,
+ CTI_PORT_TYPE_RS232_422_485_SW = 4,
+ CTI_PORT_TYPE_RS232_422_485_4B = 5,
+ CTI_PORT_TYPE_RS232_422_485_2B = 6,
+ CTI_PORT_TYPE_MAX = 7,
+};
+
+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 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;
+ unsigned int osc_freq;
+ struct exar8250_board *board;
+ void *virt;
+ int line[0];
+};
+
+struct timer_rand_state {
+ long unsigned int last_time;
+ long int last_delta;
+ long int last_delta2;
+};
+
+enum chacha_constants {
+ CHACHA_CONSTANT_EXPA = 1634760805,
+ CHACHA_CONSTANT_ND_3 = 857760878,
+ CHACHA_CONSTANT_2_BY = 2036477234,
+ CHACHA_CONSTANT_TE_K = 1797285236,
+};
+
+enum {
+ CRNG_EMPTY = 0,
+ CRNG_EARLY = 1,
+ CRNG_READY = 2,
+};
+
+enum {
+ CRNG_RESEED_START_INTERVAL = 250,
+ CRNG_RESEED_INTERVAL = 15000,
+};
+
+struct crng {
+ u8 key[32];
+ long unsigned int generation;
+ local_lock_t lock;
+};
+
+struct batch_u8 {
+ u8 entropy[96];
+ local_lock_t lock;
+ long unsigned int generation;
+ unsigned int position;
+};
+
+struct batch_u16 {
+ u16 entropy[48];
+ local_lock_t lock;
+ long unsigned int generation;
+ unsigned int position;
+};
+
+struct batch_u32 {
+ u32 entropy[24];
+ local_lock_t lock;
+ long unsigned int generation;
+ unsigned int position;
+};
+
+struct batch_u64 {
+ u64 entropy[12];
+ local_lock_t lock;
+ long unsigned int generation;
+ unsigned int position;
+};
+
+enum {
+ POOL_BITS = 256,
+ POOL_READY_BITS = 256,
+ POOL_EARLY_BITS = 128,
+};
+
+struct fast_pool {
+ long unsigned int pool[4];
+ long unsigned int last;
+ unsigned int count;
+ struct timer_list mix;
+};
+
+struct entropy_timer_state {
+ long unsigned int entropy;
+ struct timer_list timer;
+ atomic_t samples;
+ unsigned int samples_per_bit;
+};
+
+enum {
+ NUM_TRIAL_SAMPLES = 8192,
+ MAX_SAMPLES_PER_BIT = 16,
+};
+
+enum {
+ MIX_INFLIGHT = 2147483648,
+};
+
+struct component_ops {
+ int (*bind)(struct device *, struct device *, void *);
+ void (*unbind)(struct device *, struct device *, void *);
+};
+
+struct component_master_ops {
+ int (*bind)(struct device *);
+ void (*unbind)(struct device *);
+};
+
+struct component;
+
+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 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 {
+ size_t alloc;
+ size_t num;
+ struct component_match_array *compare;
+};
+
+struct aggregate_device {
+ struct list_head node;
+ bool bound;
+ const struct component_master_ops *ops;
+ struct device *parent;
+ struct component_match *match;
+};
+
+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 regcache_rbtree_node {
+ void *block;
+ long unsigned int *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;
+};
+
+typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
+
+struct mfd_of_node_entry {
+ struct list_head list;
+ struct device *dev;
+ struct device_node *np;
+};
+
+struct match_ids_walk_data {
+ struct acpi_device_id *ids;
+ struct acpi_device *adev;
+};
+
+struct badrange_entry {
+ u64 start;
+ u64 length;
+ struct list_head list;
+};
+
+struct nd_cmd_desc {
+ int in_num;
+ int out_num;
+ u32 in_sizes[5];
+ int out_sizes[5];
+};
+
+struct nd_cmd_set_config_hdr {
+ __u32 in_offset;
+ __u32 in_length;
+ __u8 in_buf[0];
+};
+
+struct nd_cmd_vendor_hdr {
+ __u32 opcode;
+ __u32 in_length;
+ __u8 in_buf[0];
+};
+
+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_cmd_clear_error {
+ __u64 address;
+ __u64 length;
+ __u32 status;
+ __u8 reserved[4];
+ __u64 cleared;
+};
+
+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 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 clear_badblocks_context {
+ resource_size_t phys;
+ resource_size_t cleared;
+};
+
+enum nd_ioctl_mode {
+ BUS_IOCTL = 0,
+ DIMM_IOCTL = 1,
+};
+
+struct nd_region_data {
+ int ns_count;
+ int ns_active;
+ unsigned int hints_shift;
+ void *flush_wpq[0];
+};
+
+typedef struct {
+ u64 val;
+} pfn_t;
+
+enum dax_access_mode {
+ DAX_ACCESS = 0,
+ DAX_RECOVERY_WRITE = 1,
+};
+
+struct dax_operations {
+ long int (*direct_access)(struct dax_device *, long unsigned int, long int, 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 *, long unsigned int, size_t);
+ size_t (*recovery_write)(struct dax_device *, long unsigned int, void *, size_t, struct iov_iter *);
+};
+
+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 device dev;
+ int range_id;
+ int id;
+};
+
+struct dev_dax_range {
+ long unsigned int pgoff;
+ struct range range;
+ struct dax_mapping *mapping;
+};
+
+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;
+ bool memmap_on_memory;
+ int nr_range;
+ struct dev_dax_range *ranges;
+};
+
+struct dev_dax_data {
+ struct dax_region *dax_region;
+ struct dev_pagemap *pgmap;
+ resource_size_t size;
+ int id;
+ bool memmap_on_memory;
+};
+
+enum dax_driver_type {
+ DAXDRV_KMEM_TYPE = 0,
+ DAXDRV_DEVICE_TYPE = 1,
+};
+
+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 dax_id {
+ struct list_head list;
+ char dev_name[30];
+};
+
+enum id_action {
+ ID_REMOVE = 0,
+ ID_ADD = 1,
+};
+
+struct sync_merge_data {
+ char name[32];
+ __s32 fd2;
+ __s32 fence;
+ __u32 flags;
+ __u32 pad;
+};
+
+struct sync_fence_info {
+ char obj_name[32];
+ char driver_name[32];
+ __s32 status;
+ __u32 flags;
+ __u64 timestamp_ns;
+};
+
+struct sync_file_info {
+ char name[32];
+ __s32 status;
+ __u32 flags;
+ __u32 num_fences;
+ __u32 pad;
+ __u64 sync_fence_info;
+};
+
+struct sync_set_deadline {
+ __u64 deadline_ns;
+ __u64 pad;
+};
+
+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 {
+ mechtype_caddy = 0,
+ mechtype_tray = 1,
+ mechtype_popup = 2,
+ mechtype_individual_changer = 4,
+ mechtype_cartridge_changer = 5,
+};
+
+struct event_header {
+ __be16 data_len;
+ __u8 notification_class: 3;
+ __u8 reserved1: 4;
+ __u8 nea: 1;
+ __u8 supp_event_class;
+};
+
+struct ata_internal {
+ struct scsi_transport_template t;
+ struct device_attribute private_port_attrs[3];
+ struct device_attribute private_link_attrs[3];
+ struct device_attribute private_dev_attrs[9];
+ struct transport_container link_attr_cont;
+ struct transport_container dev_attr_cont;
+ struct device_attribute *link_attrs[4];
+ struct device_attribute *port_attrs[4];
+ struct device_attribute *dev_attrs[10];
+};
+
+struct ata_show_ering_arg {
+ char *buf;
+ int written;
+};
+
+enum {
+ MTD_OPS_PLACE_OOB = 0,
+ MTD_OPS_AUTO_OOB = 1,
+ MTD_OPS_RAW = 2,
+};
+
+typedef union {
+ long unsigned int x[1];
+} map_word;
+
+struct mtd_chip_driver;
+
+struct map_info {
+ const char *name;
+ long unsigned int size;
+ resource_size_t phys;
+ void *virt;
+ void *cached;
+ int swap;
+ int bankwidth;
+ void (*inval_cache)(struct map_info *, long unsigned int, ssize_t);
+ void (*set_vpp)(struct map_info *, int);
+ long unsigned int pfow_base;
+ long unsigned int map_priv_1;
+ long unsigned int map_priv_2;
+ struct device_node *device_node;
+ void *fldrv_priv;
+ struct mtd_chip_driver *fldrv;
+};
+
+struct mtd_chip_driver {
+ struct mtd_info * (*probe)(struct map_info *);
+ void (*destroy)(struct mtd_info *);
+ struct module *module;
+ char *name;
+ struct list_head list;
+};
+
+typedef enum {
+ FL_READY = 0,
+ FL_STATUS = 1,
+ FL_CFI_QUERY = 2,
+ FL_JEDEC_QUERY = 3,
+ FL_ERASING = 4,
+ FL_ERASE_SUSPENDING = 5,
+ FL_ERASE_SUSPENDED = 6,
+ FL_WRITING = 7,
+ FL_WRITING_TO_BUFFER = 8,
+ FL_OTP_WRITE = 9,
+ FL_WRITE_SUSPENDING = 10,
+ FL_WRITE_SUSPENDED = 11,
+ FL_PM_SUSPENDED = 12,
+ FL_SYNCING = 13,
+ FL_UNLOADING = 14,
+ FL_LOCKING = 15,
+ FL_UNLOCKING = 16,
+ FL_POINT = 17,
+ FL_XIP_WHILE_ERASING = 18,
+ FL_XIP_WHILE_WRITING = 19,
+ FL_SHUTDOWN = 20,
+ FL_READING = 21,
+ FL_CACHEDPRG = 22,
+ FL_RESETTING = 23,
+ FL_OTPING = 24,
+ FL_PREPARING_ERASE = 25,
+ FL_VERIFYING_ERASE = 26,
+ FL_UNKNOWN = 27,
+} flstate_t;
+
+struct flchip {
+ long unsigned int start;
+ int ref_point_counter;
+ flstate_t state;
+ flstate_t oldstate;
+ unsigned int write_suspended: 1;
+ unsigned int erase_suspended: 1;
+ long unsigned int in_progress_block_addr;
+ long unsigned int in_progress_block_mask;
+ struct mutex mutex;
+ wait_queue_head_t wq;
+ int word_write_time;
+ int buffer_write_time;
+ int erase_time;
+ int word_write_time_max;
+ int buffer_write_time_max;
+ int erase_time_max;
+ void *priv;
+};
+
+struct cfi_ident {
+ uint8_t qry[3];
+ uint16_t P_ID;
+ uint16_t P_ADR;
+ uint16_t A_ID;
+ uint16_t A_ADR;
+ uint8_t VccMin;
+ uint8_t VccMax;
+ uint8_t VppMin;
+ uint8_t VppMax;
+ uint8_t WordWriteTimeoutTyp;
+ uint8_t BufWriteTimeoutTyp;
+ uint8_t BlockEraseTimeoutTyp;
+ uint8_t ChipEraseTimeoutTyp;
+ uint8_t WordWriteTimeoutMax;
+ uint8_t BufWriteTimeoutMax;
+ uint8_t BlockEraseTimeoutMax;
+ uint8_t ChipEraseTimeoutMax;
+ uint8_t DevSize;
+ uint16_t InterfaceDesc;
+ uint16_t MaxBufWriteSize;
+ uint8_t NumEraseRegions;
+ uint32_t EraseRegionInfo[0];
+} __attribute__((packed));
+
+struct cfi_private {
+ uint16_t cmdset;
+ void *cmdset_priv;
+ int interleave;
+ int device_type;
+ int cfi_mode;
+ int addr_unlock1;
+ int addr_unlock2;
+ struct mtd_info * (*cmdset_setup)(struct map_info *);
+ struct cfi_ident *cfiq;
+ int mfr;
+ int id;
+ int numchips;
+ map_word sector_erase_cmd;
+ long unsigned int chipshift;
+ const char *im_name;
+ long unsigned int quirks;
+ struct flchip chips[0];
+};
+
+struct chip_probe {
+ char *name;
+ int (*probe_chip)(struct map_info *, __u32, long unsigned int *, struct cfi_private *);
+};
+
+typedef struct mtd_info *cfi_cmdset_fn_t(struct map_info *, int);
+
+enum acpi_reconfig_event {
+ ACPI_RECONFIG_DEVICE_ADD = 0,
+ ACPI_RECONFIG_DEVICE_REMOVE = 1,
+};
+
+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;
+ long long unsigned int data[0];
+};
+
+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 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;
+};
+
+struct boardinfo {
+ struct list_head list;
+ struct spi_board_info board_info;
+};
+
+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 mdio_board_info {
+ const char *bus_id;
+ char modalias[32];
+ int mdio_addr;
+ const void *platform_data;
+};
+
+struct mdio_bus_stat_attr {
+ int addr;
+ unsigned int field_offset;
+};
+
+struct netdev_lag_lower_state_info {
+ u8 link_up: 1;
+ u8 tx_enabled: 1;
+};
+
+struct net_failover_info {
+ struct net_device *primary_dev;
+ struct net_device *standby_dev;
+ struct rtnl_link_stats64 primary_stats;
+ struct rtnl_link_stats64 standby_stats;
+ struct rtnl_link_stats64 failover_stats;
+ spinlock_t stats_lock;
+};
+
+struct usb_class_driver {
+ char *name;
+ char * (*devnode)(const struct device *, umode_t *);
+ const struct file_operations *fops;
+ int minor_base;
+};
+
+struct usb_phy_roothub {
+ struct phy *phy;
+ struct list_head list;
+};
+
+typedef __u32 __hc32;
+
+typedef __u16 __hc16;
+
+struct td;
+
+struct ed {
+ __hc32 hwINFO;
+ __hc32 hwTailP;
+ __hc32 hwHeadP;
+ __hc32 hwNextED;
+ dma_addr_t dma;
+ struct td *dummy;
+ struct ed *ed_next;
+ struct ed *ed_prev;
+ struct list_head td_list;
+ struct list_head in_use_list;
+ u8 state;
+ u8 type;
+ u8 branch;
+ u16 interval;
+ u16 load;
+ u16 last_iso;
+ u16 tick;
+ unsigned int takeback_wdh_cnt;
+ struct td *pending_td;
+ long: 64;
+};
+
+struct td {
+ __hc32 hwINFO;
+ __hc32 hwCBP;
+ __hc32 hwNextTD;
+ __hc32 hwBE;
+ __hc16 hwPSW[2];
+ __u8 index;
+ struct ed *ed;
+ struct td *td_hash;
+ struct td *next_dl_td;
+ struct urb *urb;
+ dma_addr_t td_dma;
+ dma_addr_t data_dma;
+ struct list_head td_list;
+ long: 64;
+};
+
+struct ohci_hcca {
+ __hc32 int_table[32];
+ __hc32 frame_no;
+ __hc32 done_head;
+ u8 reserved_for_hc[116];
+ u8 what[4];
+};
+
+struct ohci_roothub_regs {
+ __hc32 a;
+ __hc32 b;
+ __hc32 status;
+ __hc32 portstatus[15];
+};
+
+struct ohci_regs {
+ __hc32 revision;
+ __hc32 control;
+ __hc32 cmdstatus;
+ __hc32 intrstatus;
+ __hc32 intrenable;
+ __hc32 intrdisable;
+ __hc32 hcca;
+ __hc32 ed_periodcurrent;
+ __hc32 ed_controlhead;
+ __hc32 ed_controlcurrent;
+ __hc32 ed_bulkhead;
+ __hc32 ed_bulkcurrent;
+ __hc32 donehead;
+ __hc32 fminterval;
+ __hc32 fmremaining;
+ __hc32 fmnumber;
+ __hc32 periodicstart;
+ __hc32 lsthresh;
+ struct ohci_roothub_regs roothub;
+ long: 64;
+ long: 64;
+};
+
+struct urb_priv___2 {
+ struct ed *ed;
+ u16 length;
+ u16 td_cnt;
+ struct list_head pending;
+ struct td *td[0];
+};
+
+typedef struct urb_priv___2 urb_priv_t;
+
+enum ohci_rh_state {
+ OHCI_RH_HALTED = 0,
+ OHCI_RH_SUSPENDED = 1,
+ OHCI_RH_RUNNING = 2,
+};
+
+struct ohci_hcd {
+ spinlock_t lock;
+ struct ohci_regs *regs;
+ struct ohci_hcca *hcca;
+ dma_addr_t hcca_dma;
+ struct ed *ed_rm_list;
+ struct ed *ed_bulktail;
+ struct ed *ed_controltail;
+ struct ed *periodic[32];
+ void (*start_hnp)(struct ohci_hcd *);
+ struct dma_pool *td_cache;
+ struct dma_pool *ed_cache;
+ struct td *td_hash[64];
+ struct td *dl_start;
+ struct td *dl_end;
+ struct list_head pending;
+ struct list_head eds_in_use;
+ enum ohci_rh_state rh_state;
+ int num_ports;
+ int load[32];
+ u32 hc_control;
+ long unsigned int next_statechange;
+ u32 fminterval;
+ unsigned int autostop: 1;
+ unsigned int working: 1;
+ unsigned int restart_work: 1;
+ long unsigned int flags;
+ unsigned int prev_frame_no;
+ unsigned int wdh_cnt;
+ unsigned int prev_wdh_cnt;
+ u32 prev_donehead;
+ struct timer_list io_watchdog;
+ struct work_struct nec_work;
+ struct dentry *debug_dir;
+ long unsigned int priv[0];
+};
+
+struct ohci_driver_overrides {
+ const char *product_desc;
+ size_t extra_priv_size;
+ int (*reset)(struct usb_hcd *);
+};
+
+struct debug_buffer {
+ ssize_t (*fill_func)(struct debug_buffer *);
+ struct ohci_hcd *ohci;
+ struct mutex mutex;
+ size_t count;
+ char *page;
+};
+
+struct touchscreen_properties {
+ unsigned int max_x;
+ unsigned int max_y;
+ bool invert_x;
+ bool invert_y;
+ bool swap_x_y;
+};
+
+struct focaltech_finger_state {
+ bool active;
+ bool valid;
+ unsigned int x;
+ unsigned int y;
+};
+
+struct focaltech_hw_state {
+ struct focaltech_finger_state fingers[5];
+ unsigned int width;
+ bool pressed;
+};
+
+struct focaltech_data {
+ unsigned int x_max;
+ unsigned int y_max;
+ struct focaltech_hw_state state;
+};
+
+struct cytp_contact {
+ int x;
+ int y;
+ int z;
+};
+
+struct cytp_report_data {
+ int contact_cnt;
+ struct cytp_contact contacts[2];
+ unsigned int left: 1;
+ unsigned int right: 1;
+ unsigned int middle: 1;
+ unsigned int tap: 1;
+};
+
+struct cytp_data {
+ int fw_version;
+ int pkt_size;
+ int mode;
+ int tp_min_pressure;
+ int tp_max_pressure;
+ int tp_width;
+ int tp_high;
+ int tp_max_abs_x;
+ int tp_max_abs_y;
+ int tp_res_x;
+ int tp_res_y;
+ int tp_metrics_supported;
+};
+
+struct i2c_device_id {
+ char name[20];
+ kernel_ulong_t driver_data;
+};
+
+enum i2c_alert_protocol {
+ I2C_PROTOCOL_SMBUS_ALERT = 0,
+ I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
+};
+
+enum i2c_driver_flags {
+ I2C_DRV_ACPI_WAIVE_D0_PROBE = 1,
+};
+
+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 short unsigned int *address_list;
+ struct list_head clients;
+ u32 flags;
+};
+
+struct i2c_acpi_handler_data {
+ struct acpi_connection_info info;
+ struct i2c_adapter *adapter;
+};
+
+struct gsb_buffer {
+ u8 status;
+ u8 len;
+ union {
+ u16 wdata;
+ u8 bdata;
+ struct {
+ struct {} __empty_data;
+ u8 data[0];
+ };
+ };
+};
+
+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_irq_context {
+ int irq;
+ bool wake_capable;
+};
+
+struct gpio_restart {
+ struct gpio_desc *reset_gpio;
+ u32 active_delay_ms;
+ u32 inactive_delay_ms;
+ u32 wait_delay_ms;
+};
+
+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 sunxi_wdt_reg {
+ u8 wdt_ctrl;
+ u8 wdt_cfg;
+ u8 wdt_mode;
+ u8 wdt_timeout_shift;
+ u8 wdt_reset_mask;
+ u8 wdt_reset_val;
+ u32 wdt_key_val;
+};
+
+struct sunxi_wdt_dev {
+ struct watchdog_device wdt_dev;
+ void *wdt_base;
+ const struct sunxi_wdt_reg *wdt_regs;
+};
+
+struct em_data_callback {};
+
+enum opp_table_access {
+ OPP_TABLE_ACCESS_UNKNOWN = 0,
+ OPP_TABLE_ACCESS_EXCLUSIVE = 1,
+ OPP_TABLE_ACCESS_SHARED = 2,
+};
+
+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;
+ long unsigned int clock_latency_ns_max;
+ unsigned int voltage_tolerance_v1;
+ unsigned int parsed_static_opps;
+ enum opp_table_access shared_opp;
+ long unsigned int current_rate_single_clk;
+ struct dev_pm_opp *current_opp;
+ struct dev_pm_opp *suspend_opp;
+ struct opp_table **required_opp_tables;
+ struct device **required_devs;
+ 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;
+ struct dentry *dentry;
+ char dentry_name[255];
+};
+
+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 {
+ long unsigned int u_volt;
+ long unsigned int u_volt_min;
+ long unsigned int u_volt_max;
+ long unsigned int u_amp;
+ long unsigned int u_watt;
+};
+
+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;
+ long unsigned int *rates;
+ unsigned int level;
+ struct dev_pm_opp_supply *supplies;
+ struct dev_pm_opp_icc_bw *bandwidth;
+ long unsigned int 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_data {
+ bool turbo;
+ unsigned int level;
+ long unsigned int freq;
+ long unsigned int u_volt;
+};
+
+struct dev_pm_opp_icc_bw {
+ u32 avg;
+ u32 peak;
+};
+
+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);
+};
+
+enum {
+ OD_NORMAL_SAMPLE = 0,
+ OD_SUB_SAMPLE = 1,
+};
+
+struct od_ops {
+ unsigned int (*powersave_bias_target)(struct cpufreq_policy *, unsigned int, unsigned int);
+};
+
+struct od_policy_dbs_info {
+ struct policy_dbs_info policy_dbs;
+ unsigned int freq_lo;
+ unsigned int freq_lo_delay_us;
+ unsigned int freq_hi_delay_us;
+ unsigned int sample_type: 1;
+};
+
+struct od_dbs_tuners {
+ unsigned int powersave_bias;
+};
+
+struct sbi_cpuidle_data {
+ u32 *states;
+ struct device *dev;
+};
+
+struct sbi_domain_state {
+ bool available;
+ u32 state;
+};
+
+struct sbi_pd_provider {
+ struct list_head link;
+ struct device_node *node;
+};
+
+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;
+};
+
+enum dw_mci_state {
+ STATE_IDLE = 0,
+ STATE_SENDING_CMD = 1,
+ STATE_SENDING_DATA = 2,
+ STATE_DATA_BUSY = 3,
+ STATE_SENDING_STOP = 4,
+ STATE_DATA_ERROR = 5,
+ STATE_SENDING_CMD11 = 6,
+ STATE_WAITING_CMD11_DONE = 7,
+};
+
+enum {
+ EVENT_CMD_COMPLETE = 0,
+ EVENT_XFER_COMPLETE = 1,
+ EVENT_DATA_COMPLETE = 2,
+ EVENT_DATA_ERROR = 3,
+};
+
+enum dw_mci_cookie {
+ COOKIE_UNMAPPED___2 = 0,
+ COOKIE_PRE_MAPPED___2 = 1,
+ COOKIE_MAPPED___2 = 2,
+};
+
+enum {
+ TRANS_MODE_PIO = 0,
+ TRANS_MODE_IDMAC = 1,
+ TRANS_MODE_EDMAC = 2,
+};
+
+struct dw_mci_dma_slave {
+ struct dma_chan *ch;
+ enum dma_transfer_direction direction;
+};
+
+struct dw_mci_dma_ops;
+
+struct dw_mci_board;
+
+struct dw_mci_drv_data;
+
+struct dw_mci_slot;
+
+struct dw_mci {
+ spinlock_t lock;
+ spinlock_t irq_lock;
+ void *regs;
+ void *fifo_reg;
+ u32 data_addr_override;
+ bool wm_aligned;
+ struct scatterlist *sg;
+ struct sg_mapping_iter sg_miter;
+ struct mmc_request *mrq;
+ struct mmc_command *cmd;
+ struct mmc_data *data;
+ struct mmc_command stop_abort;
+ unsigned int prev_blksz;
+ unsigned char timing;
+ int use_dma;
+ int using_dma;
+ int dma_64bit_address;
+ dma_addr_t sg_dma;
+ void *sg_cpu;
+ const struct dw_mci_dma_ops *dma_ops;
+ unsigned int ring_size;
+ struct dw_mci_dma_slave *dms;
+ resource_size_t phy_regs;
+ u32 cmd_status;
+ u32 data_status;
+ u32 stop_cmdr;
+ u32 dir_status;
+ struct work_struct bh_work;
+ long unsigned int pending_events;
+ long unsigned int completed_events;
+ enum dw_mci_state state;
+ struct list_head queue;
+ u32 bus_hz;
+ u32 current_speed;
+ u32 minimum_speed;
+ u32 fifoth_val;
+ u16 verid;
+ struct device *dev;
+ struct dw_mci_board *pdata;
+ const struct dw_mci_drv_data *drv_data;
+ void *priv;
+ struct clk *biu_clk;
+ struct clk *ciu_clk;
+ struct dw_mci_slot *slot;
+ int fifo_depth;
+ int data_shift;
+ u8 part_buf_start;
+ u8 part_buf_count;
+ union {
+ u16 part_buf16;
+ u32 part_buf32;
+ u64 part_buf;
+ };
+ void (*push_data)(struct dw_mci *, void *, int);
+ void (*pull_data)(struct dw_mci *, void *, int);
+ u32 quirks;
+ bool vqmmc_enabled;
+ long unsigned int irq_flags;
+ int irq;
+ int sdio_id0;
+ struct timer_list cmd11_timer;
+ struct timer_list cto_timer;
+ struct timer_list dto_timer;
+};
+
+struct dw_mci_dma_ops {
+ int (*init)(struct dw_mci *);
+ int (*start)(struct dw_mci *, unsigned int);
+ void (*complete)(void *);
+ void (*stop)(struct dw_mci *);
+ void (*cleanup)(struct dw_mci *);
+ void (*exit)(struct dw_mci *);
+};
+
+struct dma_pdata;
+
+struct dw_mci_board {
+ unsigned int bus_hz;
+ u32 caps;
+ u32 caps2;
+ u32 pm_caps;
+ unsigned int fifo_depth;
+ u32 detect_delay_ms;
+ struct reset_control *rstc;
+ struct dw_mci_dma_ops *dma_ops;
+ struct dma_pdata *data;
+};
+
+struct dw_mci_drv_data {
+ long unsigned int *caps;
+ u32 num_caps;
+ u32 common_caps;
+ int (*init)(struct dw_mci *);
+ void (*set_ios)(struct dw_mci *, struct mmc_ios *);
+ int (*parse_dt)(struct dw_mci *);
+ int (*execute_tuning)(struct dw_mci_slot *, u32);
+ int (*prepare_hs400_tuning)(struct dw_mci *, struct mmc_ios *);
+ int (*switch_voltage)(struct mmc_host *, struct mmc_ios *);
+ void (*set_data_timeout)(struct dw_mci *, unsigned int);
+ u32 (*get_drto_clks)(struct dw_mci *);
+ void (*hw_reset)(struct dw_mci *);
+};
+
+struct dw_mci_slot {
+ struct mmc_host *mmc;
+ struct dw_mci *host;
+ u32 ctype;
+ struct mmc_request *mrq;
+ struct list_head queue_node;
+ unsigned int clock;
+ unsigned int __clk_old;
+ long unsigned int flags;
+ int id;
+ int sdio_id;
+};
+
+struct idmac_desc_64addr {
+ u32 des0;
+ u32 des1;
+ u32 des2;
+ u32 des3;
+ u32 des4;
+ u32 des5;
+ u32 des6;
+ u32 des7;
+};
+
+struct idmac_desc {
+ __le32 des0;
+ __le32 des1;
+ __le32 des2;
+ __le32 des3;
+};
+
+typedef struct {
+ u32 version;
+ u32 num_entries;
+ u32 desc_size;
+ u32 flags;
+ efi_memory_desc_t entry[0];
+} efi_memory_attributes_table_t;
+
+struct crypto_engine_op {
+ int (*do_one_request)(struct crypto_engine *, void *);
+};
+
+struct akcipher_engine_alg {
+ struct akcipher_alg base;
+ struct crypto_engine_op op;
+};
+
+struct virtio_crypto_ctrl_header {
+ __le32 opcode;
+ __le32 algo;
+ __le32 flag;
+ __le32 queue_id;
+};
+
+struct virtio_crypto_cipher_session_para {
+ __le32 algo;
+ __le32 keylen;
+ __le32 op;
+ __le32 padding;
+};
+
+struct virtio_crypto_session_input {
+ __le64 session_id;
+ __le32 status;
+ __le32 padding;
+};
+
+struct virtio_crypto_cipher_session_req {
+ struct virtio_crypto_cipher_session_para para;
+ __u8 padding[32];
+};
+
+struct virtio_crypto_hash_session_para {
+ __le32 algo;
+ __le32 hash_result_len;
+ __u8 padding[8];
+};
+
+struct virtio_crypto_hash_create_session_req {
+ struct virtio_crypto_hash_session_para para;
+ __u8 padding[40];
+};
+
+struct virtio_crypto_mac_session_para {
+ __le32 algo;
+ __le32 hash_result_len;
+ __le32 auth_key_len;
+ __le32 padding;
+};
+
+struct virtio_crypto_mac_create_session_req {
+ struct virtio_crypto_mac_session_para para;
+ __u8 padding[40];
+};
+
+struct virtio_crypto_aead_session_para {
+ __le32 algo;
+ __le32 key_len;
+ __le32 hash_result_len;
+ __le32 aad_len;
+ __le32 op;
+ __le32 padding;
+};
+
+struct virtio_crypto_aead_create_session_req {
+ struct virtio_crypto_aead_session_para para;
+ __u8 padding[32];
+};
+
+struct virtio_crypto_rsa_session_para {
+ __le32 padding_algo;
+ __le32 hash_algo;
+};
+
+struct virtio_crypto_ecdsa_session_para {
+ __le32 curve_id;
+ __le32 padding;
+};
+
+struct virtio_crypto_akcipher_session_para {
+ __le32 algo;
+ __le32 keytype;
+ __le32 keylen;
+ union {
+ struct virtio_crypto_rsa_session_para rsa;
+ struct virtio_crypto_ecdsa_session_para ecdsa;
+ } u;
+};
+
+struct virtio_crypto_akcipher_create_session_req {
+ struct virtio_crypto_akcipher_session_para para;
+ __u8 padding[36];
+};
+
+struct virtio_crypto_alg_chain_session_para {
+ __le32 alg_chain_order;
+ __le32 hash_mode;
+ struct virtio_crypto_cipher_session_para cipher_param;
+ union {
+ struct virtio_crypto_hash_session_para hash_param;
+ struct virtio_crypto_mac_session_para mac_param;
+ __u8 padding[16];
+ } u;
+ __le32 aad_len;
+ __le32 padding;
+};
+
+struct virtio_crypto_alg_chain_session_req {
+ struct virtio_crypto_alg_chain_session_para para;
+};
+
+struct virtio_crypto_sym_create_session_req {
+ union {
+ struct virtio_crypto_cipher_session_req cipher;
+ struct virtio_crypto_alg_chain_session_req chain;
+ __u8 padding[48];
+ } u;
+ __le32 op_type;
+ __le32 padding;
+};
+
+struct virtio_crypto_destroy_session_req {
+ __le64 session_id;
+ __u8 padding[48];
+};
+
+struct virtio_crypto_op_ctrl_req {
+ struct virtio_crypto_ctrl_header header;
+ union {
+ struct virtio_crypto_sym_create_session_req sym_create_session;
+ struct virtio_crypto_hash_create_session_req hash_create_session;
+ struct virtio_crypto_mac_create_session_req mac_create_session;
+ struct virtio_crypto_aead_create_session_req aead_create_session;
+ struct virtio_crypto_akcipher_create_session_req akcipher_create_session;
+ struct virtio_crypto_destroy_session_req destroy_session;
+ __u8 padding[56];
+ } u;
+};
+
+struct virtio_crypto_op_header {
+ __le32 opcode;
+ __le32 algo;
+ __le64 session_id;
+ __le32 flag;
+ __le32 padding;
+};
+
+struct virtio_crypto_cipher_para {
+ __le32 iv_len;
+ __le32 src_data_len;
+ __le32 dst_data_len;
+ __le32 padding;
+};
+
+struct virtio_crypto_hash_para {
+ __le32 src_data_len;
+ __le32 hash_result_len;
+};
+
+struct virtio_crypto_mac_para {
+ struct virtio_crypto_hash_para hash;
+};
+
+struct virtio_crypto_aead_para {
+ __le32 iv_len;
+ __le32 aad_len;
+ __le32 src_data_len;
+ __le32 dst_data_len;
+};
+
+struct virtio_crypto_cipher_data_req {
+ struct virtio_crypto_cipher_para para;
+ __u8 padding[24];
+};
+
+struct virtio_crypto_hash_data_req {
+ struct virtio_crypto_hash_para para;
+ __u8 padding[40];
+};
+
+struct virtio_crypto_mac_data_req {
+ struct virtio_crypto_mac_para para;
+ __u8 padding[40];
+};
+
+struct virtio_crypto_alg_chain_data_para {
+ __le32 iv_len;
+ __le32 src_data_len;
+ __le32 dst_data_len;
+ __le32 cipher_start_src_offset;
+ __le32 len_to_cipher;
+ __le32 hash_start_src_offset;
+ __le32 len_to_hash;
+ __le32 aad_len;
+ __le32 hash_result_len;
+ __le32 reserved;
+};
+
+struct virtio_crypto_alg_chain_data_req {
+ struct virtio_crypto_alg_chain_data_para para;
+};
+
+struct virtio_crypto_sym_data_req {
+ union {
+ struct virtio_crypto_cipher_data_req cipher;
+ struct virtio_crypto_alg_chain_data_req chain;
+ __u8 padding[40];
+ } u;
+ __le32 op_type;
+ __le32 padding;
+};
+
+struct virtio_crypto_aead_data_req {
+ struct virtio_crypto_aead_para para;
+ __u8 padding[32];
+};
+
+struct virtio_crypto_akcipher_para {
+ __le32 src_data_len;
+ __le32 dst_data_len;
+};
+
+struct virtio_crypto_akcipher_data_req {
+ struct virtio_crypto_akcipher_para para;
+ __u8 padding[40];
+};
+
+struct virtio_crypto_op_data_req {
+ struct virtio_crypto_op_header header;
+ union {
+ struct virtio_crypto_sym_data_req sym_req;
+ struct virtio_crypto_hash_data_req hash_req;
+ struct virtio_crypto_mac_data_req mac_req;
+ struct virtio_crypto_aead_data_req aead_req;
+ struct virtio_crypto_akcipher_data_req akcipher_req;
+ __u8 padding[48];
+ } u;
+};
+
+struct virtio_crypto_inhdr {
+ __u8 status;
+};
+
+struct virtio_crypto_ctrl_request {
+ struct virtio_crypto_op_ctrl_req ctrl;
+ struct virtio_crypto_session_input input;
+ struct virtio_crypto_inhdr ctrl_status;
+ struct completion compl;
+};
+
+struct virtio_crypto_request;
+
+typedef void (*virtio_crypto_data_callback)(struct virtio_crypto_request *, int);
+
+struct virtio_crypto_request {
+ uint8_t status;
+ struct virtio_crypto_op_data_req *req_data;
+ struct scatterlist **sgs;
+ struct data_queue *dataq;
+ virtio_crypto_data_callback alg_cb;
+};
+
+struct virtio_crypto_rsa_ctx {
+ MPI n;
+};
+
+struct virtio_crypto_akcipher_ctx {
+ struct virtio_crypto *vcrypto;
+ struct crypto_akcipher *tfm;
+ bool session_valid;
+ __u64 session_id;
+ union {
+ struct virtio_crypto_rsa_ctx rsa_ctx;
+ };
+};
+
+struct virtio_crypto_akcipher_request {
+ struct virtio_crypto_request base;
+ struct virtio_crypto_akcipher_ctx *akcipher_ctx;
+ struct akcipher_request *akcipher_req;
+ void *src_buf;
+ void *dst_buf;
+ uint32_t opcode;
+};
+
+struct virtio_crypto_akcipher_algo {
+ uint32_t algonum;
+ uint32_t service;
+ unsigned int active_devs;
+ struct akcipher_engine_alg algo;
+};
+
+struct clocksource_mmio {
+ void *reg;
+ struct clocksource clksrc;
+};
+
+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 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 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;
+ long unsigned int last_ctrl;
+ struct urb *urbout;
+ struct hid_output_fifo out[256];
+ unsigned char outhead;
+ unsigned char outtail;
+ char *outbuf;
+ dma_addr_t outbuf_dma;
+ long unsigned int last_out;
+ struct mutex mutex;
+ spinlock_t lock;
+ long unsigned int iofl;
+ struct timer_list io_retry;
+ long unsigned int stop_retry;
+ unsigned int retry_delay;
+ struct work_struct reset_work;
+ wait_queue_head_t wait;
+};
+
+struct rmem_assigned_device {
+ struct device *dev;
+ struct reserved_mem *rmem;
+ struct list_head list;
+};
+
+struct rpmsg_endpoint_info {
+ char name[32];
+ __u32 src;
+ __u32 dst;
+};
+
+struct rpmsg_ctrldev {
+ struct rpmsg_device *rpdev;
+ struct cdev cdev;
+ struct device dev;
+ struct mutex ctrl_lock;
+};
+
+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,
+};
+
+enum snd_device_state {
+ SNDRV_DEV_BUILD = 0,
+ SNDRV_DEV_REGISTERED = 1,
+ SNDRV_DEV_DISCONNECTED = 2,
+};
+
+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 *);
+};
+
+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;
+};
+
+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_kctl {
+ struct snd_kcontrol *kctl;
+ struct list_head list;
+ unsigned int mask_bits;
+ struct snd_jack *jack;
+ bool sw_inject_enable;
+};
+
+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,
+};
+
+struct snd_timer_id {
+ int dev_class;
+ int dev_sclass;
+ int card;
+ int device;
+ int subdevice;
+};
+
+enum {
+ SNDRV_CTL_TLV_OP_READ = 0,
+ SNDRV_CTL_TLV_OP_WRITE = 1,
+ SNDRV_CTL_TLV_OP_CMD = -1,
+};
+
+struct soc_bytes {
+ int base;
+ int num_regs;
+ u32 mask;
+};
+
+struct soc_bytes_ext {
+ int max;
+ int (*get)(struct snd_kcontrol *, unsigned int *, unsigned int);
+ int (*put)(struct snd_kcontrol *, const unsigned int *, unsigned int);
+};
+
+struct soc_mreg_control {
+ long int min;
+ long int max;
+ unsigned int regbase;
+ unsigned int regcount;
+ unsigned int nbits;
+ unsigned int invert;
+};
+
+struct __kernel_sock_timeval {
+ __s64 tv_sec;
+ __s64 tv_usec;
+};
+
+struct dmabuf_token {
+ __u32 token_start;
+ __u32 token_count;
+};
+
+struct linger {
+ int l_onoff;
+ int l_linger;
+};
+
+struct ucred {
+ __u32 pid;
+ __u32 uid;
+ __u32 gid;
+};
+
+struct so_timestamping {
+ int flags;
+ int bind_phc;
+};
+
+enum txtime_flags {
+ SOF_TXTIME_DEADLINE_MODE = 1,
+ SOF_TXTIME_REPORT_ERRORS = 2,
+ SOF_TXTIME_FLAGS_LAST = 2,
+ SOF_TXTIME_FLAGS_MASK = 3,
+};
+
+struct sock_txtime {
+ __kernel_clockid_t clockid;
+ __u32 flags;
+};
+
+enum sk_pacing {
+ SK_PACING_NONE = 0,
+ SK_PACING_NEEDED = 1,
+ SK_PACING_FQ = 2,
+};
+
+struct sock_skb_cb {
+ u32 dropcount;
+};
+
+struct cgroup_cls_state {
+ struct cgroup_subsys_state css;
+ u32 classid;
+};
+
+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 {
+ BPF_F_RECOMPUTE_CSUM = 1,
+ BPF_F_INVALIDATE_HASH = 2,
+};
+
+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_F_TUNINFO_IPV6 = 1,
+};
+
+enum {
+ BPF_F_ZERO_CSUM_TX = 2,
+ BPF_F_DONT_FRAGMENT = 4,
+ BPF_F_SEQ_NUMBER = 8,
+ BPF_F_NO_TUNNEL_KEY = 16,
+};
+
+enum {
+ BPF_F_TUNINFO_FLAGS = 16,
+};
+
+enum {
+ BPF_F_INDEX_MASK = 4294967295ULL,
+ BPF_F_CURRENT_CPU = 4294967295ULL,
+ BPF_F_CTXLEN_MASK = 4503595332403200ULL,
+};
+
+enum {
+ BPF_CSUM_LEVEL_QUERY = 0,
+ BPF_CSUM_LEVEL_INC = 1,
+ BPF_CSUM_LEVEL_DEC = 2,
+ BPF_CSUM_LEVEL_RESET = 3,
+};
+
+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_SK_LOOKUP_F_REPLACE = 1,
+ BPF_SK_LOOKUP_F_NO_REUSEPORT = 2,
+};
+
+enum bpf_adj_room_mode {
+ BPF_ADJ_ROOM_NET = 0,
+ BPF_ADJ_ROOM_MAC = 1,
+};
+
+enum bpf_hdr_start_off {
+ BPF_HDR_START_MAC = 0,
+ BPF_HDR_START_NET = 1,
+};
+
+enum {
+ BPF_SKB_TSTAMP_UNSPEC = 0,
+ BPF_SKB_TSTAMP_DELIVERY_MONO = 1,
+ BPF_SKB_CLOCK_REALTIME = 0,
+ BPF_SKB_CLOCK_MONOTONIC = 1,
+ BPF_SKB_CLOCK_TAI = 2,
+};
+
+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];
+ };
+};
+
+struct bpf_xfrm_state {
+ __u32 reqid;
+ __u32 spi;
+ __u16 family;
+ __u16 ext;
+ union {
+ __u32 remote_ipv4;
+ __u32 remote_ipv6[4];
+ };
+};
+
+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;
+};
+
+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;
+ };
+};
+
+struct bpf_xdp_sock {
+ __u32 queue_id;
+};
+
+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,
+ TCP_BPF_SOCK_OPS_CB_FLAGS = 1008,
+};
+
+enum {
+ BPF_LOAD_HDR_OPT_TCP_SYN = 1,
+};
+
+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,
+ BPF_FIB_LOOKUP_MARK = 32,
+};
+
+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,
+};
+
+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;
+ };
+ union {
+ struct {
+ __u32 mark;
+ };
+ struct {
+ __u8 smac[6];
+ __u8 dmac[6];
+ };
+ };
+};
+
+struct bpf_redir_neigh {
+ __u32 nh_family;
+ union {
+ __be32 ipv4_nh;
+ __u32 ipv6_nh[4];
+ };
+};
+
+enum bpf_check_mtu_flags {
+ BPF_MTU_CHK_SEGS = 1,
+};
+
+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 {
+ 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,
+};
+
+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;
+};
+
+typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
+
+struct bpf_empty_prog_array {
+ struct bpf_prog_array hdr;
+ struct bpf_prog *null_prog;
+};
+
+struct udp6_sock {
+ struct udp_sock udp;
+ struct ipv6_pinfo inet6;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+typedef u8 dscp_t;
+
+struct fib_table;
+
+struct fib_result {
+ __be32 prefix;
+ unsigned char prefixlen;
+ unsigned char nh_sel;
+ unsigned char type;
+ unsigned char scope;
+ u32 tclassid;
+ dscp_t dscp;
+ struct fib_nh_common *nhc;
+ struct fib_info *fi;
+ struct fib_table *table;
+ struct hlist_head *fa_head;
+};
+
+struct fib_table {
+ struct hlist_node tb_hlist;
+ u32 tb_id;
+ int tb_num_default;
+ struct callback_head rcu;
+ long unsigned int *tb_data;
+ long unsigned int __data[0];
+};
+
+struct ipv6_bpf_stub {
+ int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
+ struct sock * (*udp6_lib_lookup)(const 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 mptcp_sock {};
+
+struct bpf_tcp_req_attrs {
+ u32 rcv_tsval;
+ u32 rcv_tsecr;
+ u16 mss;
+ u8 rcv_wscale;
+ u8 snd_wscale;
+ u8 ecn_ok;
+ u8 wscale_ok;
+ u8 sack_ok;
+ u8 tstamp_ok;
+ u8 usec_ts_ok;
+ u8 reserved[3];
+};
+
+struct strp_msg {
+ int full_len;
+ int offset;
+};
+
+struct _strp_msg {
+ struct strp_msg strp;
+ int accum_len;
+};
+
+struct tls_msg {
+ u8 control;
+};
+
+struct sk_skb_cb {
+ unsigned char data[20];
+ unsigned char pad[4];
+ struct _strp_msg strp;
+ struct tls_msg tls;
+ u64 temp_reg;
+};
+
+struct xdp_sock {
+ struct sock sk;
+ 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;
+ u32 tx_budget_spent;
+ 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;
+ long: 64;
+};
+
+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;
+};
+
+struct nf_conn___init {
+ struct nf_conn ct;
+};
+
+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);
+
+struct bpf_scratchpad {
+ union {
+ __be32 diff[128];
+ u8 buff[512];
+ };
+ local_lock_t bh_lock;
+};
+
+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);
+
+enum {
+ BPF_F_NEIGH = 65536,
+ BPF_F_PEER = 131072,
+ BPF_F_NEXTHOP = 262144,
+};
+
+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);
+
+typedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64);
+
+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_curr)();
+
+typedef u64 (*btf_bpf_skb_cgroup_classid)(const struct sk_buff *);
+
+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);
+
+typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);
+
+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);
+
+typedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);
+
+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);
+
+typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+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);
+
+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 dst_cache_pcpu {
+ long unsigned int refresh_ts;
+ struct dst_entry *dst;
+ u32 cookie;
+ union {
+ struct in_addr in_saddr;
+ struct in6_addr in6_saddr;
+ };
+};
+
+struct tc_qopt_offload_stats {
+ struct gnet_stats_basic_sync *bstats;
+ struct gnet_stats_queue *qstats;
+};
+
+enum tc_mq_command {
+ TC_MQ_CREATE = 0,
+ TC_MQ_DESTROY = 1,
+ TC_MQ_STATS = 2,
+ TC_MQ_GRAFT = 3,
+};
+
+struct tc_mq_opt_offload_graft_params {
+ long unsigned int 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 tc_fifo_qopt {
+ __u32 limit;
+};
+
+enum tc_fifo_command {
+ TC_FIFO_REPLACE = 0,
+ TC_FIFO_DESTROY = 1,
+ TC_FIFO_STATS = 2,
+};
+
+struct tc_fifo_qopt_offload {
+ enum tc_fifo_command command;
+ u32 handle;
+ u32 parent;
+ union {
+ struct tc_qopt_offload_stats stats;
+ };
+};
+
+struct ethtool_forced_speed_map {
+ u32 speed;
+ long unsigned int caps[2];
+ const u32 *cap_arr;
+ u32 arr_size;
+};
+
+struct link_mode_info {
+ int speed;
+ u8 lanes;
+ u8 duplex;
+};
+
+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_module_fw_flash_status {
+ ETHTOOL_MODULE_FW_FLASH_STATUS_STARTED = 1,
+ ETHTOOL_MODULE_FW_FLASH_STATUS_IN_PROGRESS = 2,
+ ETHTOOL_MODULE_FW_FLASH_STATUS_COMPLETED = 3,
+ ETHTOOL_MODULE_FW_FLASH_STATUS_ERROR = 4,
+};
+
+enum {
+ SFF8024_ID_UNK = 0,
+ SFF8024_ID_SFF_8472 = 2,
+ SFF8024_ID_SFP = 3,
+ SFF8024_ID_DWDM_SFP = 11,
+ SFF8024_ID_QSFP_8438 = 12,
+ SFF8024_ID_QSFP_8436_8636 = 13,
+ SFF8024_ID_QSFP28_8636 = 17,
+ SFF8024_ID_QSFP_DD = 24,
+ SFF8024_ID_OSFP = 25,
+ SFF8024_ID_DSFP = 27,
+ SFF8024_ID_QSFP_PLUS_CMIS = 30,
+ SFF8024_ID_SFP_DD_CMIS = 31,
+ SFF8024_ID_SFP_PLUS_CMIS = 32,
+ SFF8024_ENCODING_UNSPEC = 0,
+ SFF8024_ENCODING_8B10B = 1,
+ SFF8024_ENCODING_4B5B = 2,
+ SFF8024_ENCODING_NRZ = 3,
+ SFF8024_ENCODING_8472_MANCHESTER = 4,
+ SFF8024_ENCODING_8472_SONET = 5,
+ SFF8024_ENCODING_8472_64B66B = 6,
+ SFF8024_ENCODING_8436_MANCHESTER = 6,
+ SFF8024_ENCODING_8436_SONET = 4,
+ SFF8024_ENCODING_8436_64B66B = 5,
+ SFF8024_ENCODING_256B257B = 7,
+ SFF8024_ENCODING_PAM4 = 8,
+ SFF8024_CONNECTOR_UNSPEC = 0,
+ SFF8024_CONNECTOR_SC = 1,
+ SFF8024_CONNECTOR_FIBERJACK = 6,
+ SFF8024_CONNECTOR_LC = 7,
+ SFF8024_CONNECTOR_MT_RJ = 8,
+ SFF8024_CONNECTOR_MU = 9,
+ SFF8024_CONNECTOR_SG = 10,
+ SFF8024_CONNECTOR_OPTICAL_PIGTAIL = 11,
+ SFF8024_CONNECTOR_MPO_1X12 = 12,
+ SFF8024_CONNECTOR_MPO_2X16 = 13,
+ SFF8024_CONNECTOR_HSSDC_II = 32,
+ SFF8024_CONNECTOR_COPPER_PIGTAIL = 33,
+ SFF8024_CONNECTOR_RJ45 = 34,
+ SFF8024_CONNECTOR_NOSEPARATE = 35,
+ SFF8024_CONNECTOR_MXC_2X16 = 36,
+ SFF8024_ECC_UNSPEC = 0,
+ SFF8024_ECC_100G_25GAUI_C2M_AOC = 1,
+ SFF8024_ECC_100GBASE_SR4_25GBASE_SR = 2,
+ SFF8024_ECC_100GBASE_LR4_25GBASE_LR = 3,
+ SFF8024_ECC_100GBASE_ER4_25GBASE_ER = 4,
+ SFF8024_ECC_100GBASE_SR10 = 5,
+ SFF8024_ECC_100GBASE_CR4 = 11,
+ SFF8024_ECC_25GBASE_CR_S = 12,
+ SFF8024_ECC_25GBASE_CR_N = 13,
+ SFF8024_ECC_10GBASE_T_SFI = 22,
+ SFF8024_ECC_10GBASE_T_SR = 28,
+ SFF8024_ECC_5GBASE_T = 29,
+ SFF8024_ECC_2_5GBASE_T = 30,
+};
+
+enum {
+ SFP_PHYS_ID = 0,
+ SFP_PHYS_EXT_ID = 1,
+ SFP_PHYS_EXT_ID_SFP = 4,
+ SFP_CONNECTOR = 2,
+ SFP_COMPLIANCE = 3,
+ SFP_ENCODING = 11,
+ SFP_BR_NOMINAL = 12,
+ SFP_RATE_ID = 13,
+ SFF_RID_8079 = 1,
+ SFF_RID_8431_RX_ONLY = 2,
+ SFF_RID_8431_TX_ONLY = 4,
+ SFF_RID_8431 = 6,
+ SFF_RID_10G8G = 14,
+ SFP_LINK_LEN_SM_KM = 14,
+ SFP_LINK_LEN_SM_100M = 15,
+ SFP_LINK_LEN_50UM_OM2_10M = 16,
+ SFP_LINK_LEN_62_5UM_OM1_10M = 17,
+ SFP_LINK_LEN_COPPER_1M = 18,
+ SFP_LINK_LEN_50UM_OM4_10M = 18,
+ SFP_LINK_LEN_50UM_OM3_10M = 19,
+ SFP_VENDOR_NAME = 20,
+ SFP_VENDOR_OUI = 37,
+ SFP_VENDOR_PN = 40,
+ SFP_VENDOR_REV = 56,
+ SFP_OPTICAL_WAVELENGTH_MSB = 60,
+ SFP_OPTICAL_WAVELENGTH_LSB = 61,
+ SFP_CABLE_SPEC = 60,
+ SFP_CC_BASE = 63,
+ SFP_OPTIONS = 64,
+ SFP_OPTIONS_HIGH_POWER_LEVEL = 8192,
+ SFP_OPTIONS_PAGING_A2 = 4096,
+ SFP_OPTIONS_RETIMER = 2048,
+ SFP_OPTIONS_COOLED_XCVR = 1024,
+ SFP_OPTIONS_POWER_DECL = 512,
+ SFP_OPTIONS_RX_LINEAR_OUT = 256,
+ SFP_OPTIONS_RX_DECISION_THRESH = 128,
+ SFP_OPTIONS_TUNABLE_TX = 64,
+ SFP_OPTIONS_RATE_SELECT = 32,
+ SFP_OPTIONS_TX_DISABLE = 16,
+ SFP_OPTIONS_TX_FAULT = 8,
+ SFP_OPTIONS_LOS_INVERTED = 4,
+ SFP_OPTIONS_LOS_NORMAL = 2,
+ SFP_BR_MAX = 66,
+ SFP_BR_MIN = 67,
+ SFP_VENDOR_SN = 68,
+ SFP_DATECODE = 84,
+ SFP_DIAGMON = 92,
+ SFP_DIAGMON_DDM = 64,
+ SFP_DIAGMON_INT_CAL = 32,
+ SFP_DIAGMON_EXT_CAL = 16,
+ SFP_DIAGMON_RXPWR_AVG = 8,
+ SFP_DIAGMON_ADDRMODE = 4,
+ SFP_ENHOPTS = 93,
+ SFP_ENHOPTS_ALARMWARN = 128,
+ SFP_ENHOPTS_SOFT_TX_DISABLE = 64,
+ SFP_ENHOPTS_SOFT_TX_FAULT = 32,
+ SFP_ENHOPTS_SOFT_RX_LOS = 16,
+ SFP_ENHOPTS_SOFT_RATE_SELECT = 8,
+ SFP_ENHOPTS_APP_SELECT_SFF8079 = 4,
+ SFP_ENHOPTS_SOFT_RATE_SFF8431 = 2,
+ SFP_SFF8472_COMPLIANCE = 94,
+ SFP_SFF8472_COMPLIANCE_NONE = 0,
+ SFP_SFF8472_COMPLIANCE_REV9_3 = 1,
+ SFP_SFF8472_COMPLIANCE_REV9_5 = 2,
+ SFP_SFF8472_COMPLIANCE_REV10_2 = 3,
+ SFP_SFF8472_COMPLIANCE_REV10_4 = 4,
+ SFP_SFF8472_COMPLIANCE_REV11_0 = 5,
+ SFP_SFF8472_COMPLIANCE_REV11_3 = 6,
+ SFP_SFF8472_COMPLIANCE_REV11_4 = 7,
+ SFP_SFF8472_COMPLIANCE_REV12_0 = 8,
+ SFP_CC_EXT = 95,
+};
+
+struct ethtool_module_fw_flash {
+ struct list_head list;
+ netdevice_tracker dev_tracker;
+ struct work_struct work;
+ struct ethtool_cmis_fw_update_params fw_update;
+};
+
+struct module_reply_data {
+ struct ethnl_reply_data base;
+ struct ethtool_module_power_mode_params power;
+};
+
+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 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;
+};
+
+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,
+};
+
+struct rtvia {
+ __kernel_sa_family_t rtvia_family;
+ __u8 rtvia_addr[0];
+};
+
+struct uncached_list {
+ spinlock_t lock;
+ struct list_head head;
+};
+
+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 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;
+};
+
+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,
+};
+
+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 fib_prop {
+ int error;
+ u8 scope;
+};
+
+struct sk_buff_fclones {
+ struct sk_buff skb1;
+ struct sk_buff skb2;
+ refcount_t fclone_ref;
+};
+
+enum {
+ BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
+ BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
+};
+
+enum {
+ TCP_NO_QUEUE = 0,
+ TCP_RECV_QUEUE = 1,
+ TCP_SEND_QUEUE = 2,
+ TCP_QUEUES_NR = 3,
+};
+
+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,
+ TCPF_ACK_DEFERRED = 64,
+};
+
+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;
+};
+
+struct tsq_tasklet {
+ struct tasklet_struct tasklet;
+ struct list_head head;
+};
+
+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_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 igmphdr {
+ __u8 type;
+ __u8 code;
+ __sum16 csum;
+ __be32 group;
+};
+
+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 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 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 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 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 weight_high;
+ __u16 resvd2;
+};
+
+enum {
+ NEXTHOP_GRP_TYPE_MPATH = 0,
+ NEXTHOP_GRP_TYPE_RES = 1,
+ __NEXTHOP_GRP_TYPE_MAX = 2,
+};
+
+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_OP_FLAGS = 14,
+ NHA_GROUP_STATS = 15,
+ NHA_HW_STATS_ENABLE = 16,
+ NHA_HW_STATS_USED = 17,
+ __NHA_MAX = 18,
+};
+
+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,
+};
+
+enum {
+ NHA_GROUP_STATS_UNSPEC = 0,
+ NHA_GROUP_STATS_ENTRY = 1,
+ __NHA_GROUP_STATS_MAX = 2,
+};
+
+enum {
+ NHA_GROUP_STATS_ENTRY_UNSPEC = 0,
+ NHA_GROUP_STATS_ENTRY_ID = 1,
+ NHA_GROUP_STATS_ENTRY_PACKETS = 2,
+ NHA_GROUP_STATS_ENTRY_PACKETS_HW = 3,
+ __NHA_GROUP_STATS_ENTRY_MAX = 4,
+};
+
+struct rtnexthop {
+ short unsigned int rtnh_len;
+ unsigned char rtnh_flags;
+ unsigned char rtnh_hops;
+ int rtnh_ifindex;
+};
+
+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 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;
+ long unsigned int nh_grp_res_idle_timer;
+ long unsigned int 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;
+ bool nh_hw_stats;
+ struct nlattr *nh_encap;
+ u16 nh_encap_type;
+ u32 nlflags;
+ struct nl_info nlinfo;
+};
+
+enum nexthop_event_type {
+ NEXTHOP_EVENT_DEL = 0,
+ NEXTHOP_EVENT_REPLACE = 1,
+ NEXTHOP_EVENT_RES_TABLE_PRE_REPLACE = 2,
+ NEXTHOP_EVENT_BUCKET_REPLACE = 3,
+ NEXTHOP_EVENT_HW_STATS_REPORT_DELTA = 4,
+};
+
+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,
+ NH_NOTIFIER_INFO_TYPE_GRP_HW_STATS = 4,
+};
+
+struct nh_notifier_single_info {
+ struct net_device *dev;
+ u8 gw_family;
+ union {
+ __be32 ipv4;
+ struct in6_addr ipv6;
+ };
+ u32 id;
+ u8 is_reject: 1;
+ u8 is_fdb: 1;
+ u8 has_encap: 1;
+};
+
+struct nh_notifier_grp_entry_info {
+ u16 weight;
+ struct nh_notifier_single_info nh;
+};
+
+struct nh_notifier_grp_info {
+ u16 num_nh;
+ bool is_fdb;
+ bool hw_stats;
+ struct nh_notifier_grp_entry_info nh_entries[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_notifier_res_table_info {
+ u16 num_nh_buckets;
+ bool hw_stats;
+ struct nh_notifier_single_info nhs[0];
+};
+
+struct nh_notifier_grp_hw_stats_entry_info {
+ u32 id;
+ u64 packets;
+};
+
+struct nh_notifier_grp_hw_stats_info {
+ u16 num_nh;
+ bool hw_stats_used;
+ struct nh_notifier_grp_hw_stats_entry_info stats[0];
+};
+
+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_grp_hw_stats_info *nh_grp_hw_stats;
+ };
+};
+
+struct nh_dump_filter {
+ u32 nh_id;
+ int dev_idx;
+ int master_idx;
+ bool group_filter;
+ bool fdb_filter;
+ u32 res_bucket_nh_id;
+ u32 op_flags;
+};
+
+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;
+};
+
+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 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;
+ __u16 tcpi_total_rto;
+ __u16 tcpi_total_rto_recoveries;
+ __u32 tcpi_total_rto_time;
+};
+
+enum flow_dissector_ctrl_flags {
+ FLOW_DIS_IS_FRAGMENT = 1,
+ FLOW_DIS_FIRST_FRAG = 2,
+ FLOW_DIS_F_TUNNEL_CSUM = 4,
+ FLOW_DIS_F_TUNNEL_DONT_FRAGMENT = 8,
+ FLOW_DIS_F_TUNNEL_OAM = 16,
+ FLOW_DIS_F_TUNNEL_CRIT_OPT = 32,
+ FLOW_DIS_ENCAPSULATION = 64,
+};
+
+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_dump_filter {
+ u32 table_id;
+ bool filter_set;
+ bool dump_routes;
+ bool dump_exceptions;
+ bool rtnl_held;
+ unsigned char protocol;
+ unsigned char rt_type;
+ unsigned int flags;
+ struct net_device *dev;
+};
+
+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;
+ long unsigned int rtmsg_info;
+ __u32 rtmsg_flags;
+ int rtmsg_ifindex;
+};
+
+struct fib6_gc_args {
+ int timeout;
+ int more;
+};
+
+struct rt6_exception {
+ struct hlist_node hlist;
+ struct rt6_info *rt6i;
+ long unsigned int stamp;
+ struct callback_head rcu;
+};
+
+typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
+
+struct rd_msg {
+ struct icmp6hdr icmph;
+ struct in6_addr target;
+ struct in6_addr dest;
+ __u8 opt[0];
+};
+
+struct rt6_rtnl_dump_arg {
+ struct sk_buff *skb;
+ struct netlink_callback *cb;
+ struct net *net;
+ struct fib_dump_filter filter;
+};
+
+struct netevent_redirect {
+ struct dst_entry *old;
+ struct dst_entry *new;
+ struct neighbour *neigh;
+ const void *daddr;
+};
+
+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 fib6_nh_dm_arg {
+ struct net *net;
+ const struct in6_addr *saddr;
+ int oif;
+ int flags;
+ struct fib6_nh *nh;
+};
+
+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;
+};
+
+struct fib6_nh_match_arg {
+ const struct net_device *dev;
+ const struct in6_addr *gw;
+ struct fib6_nh *match;
+};
+
+struct fib6_nh_age_excptn_arg {
+ struct fib6_gc_args *gc_args;
+ long unsigned int now;
+};
+
+struct fib6_nh_rd_arg {
+ struct fib6_result *res;
+ struct flowi6 *fl6;
+ const struct in6_addr *gw;
+ struct rt6_info **ret;
+};
+
+struct ip6rd_flowi {
+ struct flowi6 fl6;
+ struct in6_addr gateway;
+};
+
+struct fib6_nh_del_cached_rt_arg {
+ struct fib6_config *cfg;
+ struct fib6_info *f6i;
+};
+
+struct arg_dev_net_ip {
+ struct net *net;
+ struct in6_addr *addr;
+};
+
+struct arg_netdev_event {
+ const struct net_device *dev;
+ union {
+ unsigned char nh_flags;
+ long unsigned int event;
+ };
+};
+
+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_exception_dump_walker {
+ struct rt6_rtnl_dump_arg *dump;
+ struct fib6_info *rt;
+ unsigned int flags;
+ unsigned int skip;
+ unsigned int count;
+};
+
+struct sr6_tlv {
+ __u8 type;
+ __u8 len;
+ __u8 data[0];
+};
+
+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 xfrm_dst_lookup_params {
+ struct net *net;
+ int tos;
+ int oif;
+ xfrm_address_t *saddr;
+ xfrm_address_t *daddr;
+ u32 mark;
+ __u8 ipproto;
+ union flowi_uli uli;
+};
+
+struct xfrm_policy_afinfo {
+ struct dst_ops *dst_ops;
+ struct dst_entry * (*dst_lookup)(const struct xfrm_dst_lookup_params *);
+ int (*get_saddr)(xfrm_address_t *, const struct xfrm_dst_lookup_params *);
+ int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
+ struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
+};
+
+enum sock_shutdown_cmd {
+ SHUT_RD = 0,
+ SHUT_WR = 1,
+ SHUT_RDWR = 2,
+};
+
+struct svc_sock {
+ struct svc_xprt sk_xprt;
+ struct socket *sk_sock;
+ struct sock *sk_sk;
+ void (*sk_ostate)(struct sock *);
+ void (*sk_odata)(struct sock *);
+ void (*sk_owspace)(struct sock *);
+ __be32 sk_marker;
+ u32 sk_tcplen;
+ u32 sk_datalen;
+ struct page_frag_cache sk_frag_cache;
+ struct completion sk_handshake_done;
+ struct page *sk_pages[259];
+};
+
+struct sock_xprt {
+ struct rpc_xprt xprt;
+ struct socket *sock;
+ struct sock *inet;
+ struct file *file;
+ struct {
+ struct {
+ __be32 fraghdr;
+ __be32 xid;
+ __be32 calldir;
+ };
+ u32 offset;
+ u32 len;
+ long unsigned int copied;
+ } recv;
+ struct {
+ u32 offset;
+ } xmit;
+ long unsigned int sock_state;
+ struct delayed_work connect_worker;
+ struct work_struct error_worker;
+ struct work_struct recv_worker;
+ struct mutex recv_mutex;
+ struct completion handshake_done;
+ struct __kernel_sockaddr_storage srcaddr;
+ short unsigned int srcport;
+ int xprt_err;
+ struct rpc_clnt *clnt;
+ size_t rcvsize;
+ size_t sndsize;
+ struct rpc_timeout tcp_timeout;
+ void (*old_data_ready)(struct sock *);
+ void (*old_state_change)(struct sock *);
+ void (*old_write_space)(struct sock *);
+ void (*old_error_report)(struct sock *);
+};
+
+enum {
+ TLS_ALERT_LEVEL_WARNING = 1,
+ TLS_ALERT_LEVEL_FATAL = 2,
+};
+
+typedef void (*tls_done_func_t)(void *, int, key_serial_t);
+
+struct tls_handshake_args {
+ struct socket *ta_sock;
+ tls_done_func_t ta_done;
+ void *ta_data;
+ const char *ta_peername;
+ unsigned int ta_timeout_ms;
+ key_serial_t ta_keyring;
+ key_serial_t ta_my_cert;
+ key_serial_t ta_my_privkey;
+ unsigned int ta_num_peerids;
+ key_serial_t ta_my_peerids[5];
+};
+
+struct rpc_buffer {
+ size_t len;
+ char data[0];
+};
+
+struct thread_deferred_req {
+ struct cache_deferred_req handle;
+ struct completion completion;
+};
+
+struct cache_queue {
+ struct list_head list;
+ int reader;
+};
+
+struct cache_request {
+ struct cache_queue q;
+ struct cache_head *item;
+ char *buf;
+ int len;
+ int readers;
+};
+
+struct cache_reader {
+ struct cache_queue q;
+ int offset;
+};
+
+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 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,
+};
+
+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_priority_tci_mapping {
+ u32 priority;
+ u16 vlan_qos;
+ struct vlan_priority_tci_mapping *next;
+};
+
+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 *vlan_pcpu_stats;
+};
+
+enum vlan_protos {
+ VLAN_PROTO_8021Q = 0,
+ VLAN_PROTO_8021AD = 1,
+ VLAN_PROTO_NUM = 2,
+};
+
+struct vlan_vid_info {
+ struct list_head list;
+ __be16 proto;
+ u16 vid;
+ int refcount;
+};
+
+struct fib_rule_port_range {
+ __u16 start;
+ __u16 end;
+};
+
+struct fib_kuid_range {
+ kuid_t start;
+ kuid_t 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 *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 fib_lookup_arg {
+ void *lookup_ptr;
+ const void *lookup_data;
+ void *result;
+ struct fib_rule *rule;
+ u32 table;
+ int flags;
+};
+
+enum l3mdev_type {
+ L3MDEV_TYPE_UNSPEC = 0,
+ L3MDEV_TYPE_VRF = 1,
+ __L3MDEV_TYPE_MAX = 2,
+};
+
+typedef int (*lookup_by_table_id_t)(struct net *, u32);
+
+struct l3mdev_handler {
+ lookup_by_table_id_t dev_lookup;
+};
+
+struct rc {
+ long int (*fill)(void *, long unsigned int);
+ uint8_t *ptr;
+ uint8_t *buffer;
+ uint8_t *buffer_end;
+ long int buffer_size;
+ uint32_t code;
+ uint32_t range;
+ uint32_t bound;
+ void (*error)(char *);
+};
+
+struct lzma_header {
+ uint8_t pos;
+ uint32_t dict_size;
+ uint64_t dst_size;
+} __attribute__((packed));
+
+struct writer {
+ uint8_t *buffer;
+ uint8_t previous_byte;
+ size_t buffer_pos;
+ int bufsize;
+ size_t global_pos;
+ long int (*flush)(void *, long unsigned int);
+ struct lzma_header *header;
+};
+
+struct cstate {
+ int state;
+ uint32_t rep0;
+ uint32_t rep1;
+ uint32_t rep2;
+ uint32_t rep3;
+};
+
+struct cpio_data {
+ void *data;
+ size_t size;
+ char name[18];
+};
+
+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 klist_waiter {
+ struct list_head list;
+ struct klist_node *node;
+ struct task_struct *process;
+ int woken;
+};
+
+struct objpool_slot {
+ uint32_t head;
+ uint32_t tail;
+ uint32_t last;
+ uint32_t mask;
+ void *entries[0];
+};
+
+typedef int (*objpool_init_obj_cb)(void *, void *);
+
+struct objpool_head;
+
+typedef int (*objpool_fini_cb)(struct objpool_head *, void *);
+
+struct objpool_head {
+ int obj_size;
+ int nr_objs;
+ int nr_possible_cpus;
+ int capacity;
+ gfp_t gfp;
+ refcount_t ref;
+ long unsigned int flags;
+ struct objpool_slot **cpu_slots;
+ objpool_fini_cb release;
+ void *context;
+};
+
+typedef struct {
+ long unsigned int key[2];
+} hsiphash_key_t;
+
+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 *, long unsigned int *, efi_guid_t *);
+ efi_status_t (*get_rng)(efi_rng_protocol_t *, efi_guid_t *, long unsigned int, u8 *);
+ };
+ struct {
+ u32 get_info;
+ u32 get_rng;
+ } mixed_mode;
+};
+
+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;
+
+typedef struct {
+ u32 read;
+ u32 write;
+} efi_pci_io_protocol_access_32_t;
+
+typedef struct {
+ void *read;
+ void *write;
+} efi_pci_io_protocol_access_t;
+
+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, long unsigned int, void *);
+
+typedef struct {
+ efi_pci_io_protocol_cfg_t read;
+ efi_pci_io_protocol_cfg_t write;
+} efi_pci_io_protocol_config_access_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 *, long unsigned int *, long unsigned int *, long unsigned int *, long unsigned int *);
+ 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 vdso_data_store {
+ struct vdso_data data[2];
+ u8 page[4096];
+};
+
+enum vvar_pages {
+ VVAR_DATA_PAGE_OFFSET = 0,
+ VVAR_TIMENS_PAGE_OFFSET = 1,
+ VVAR_NR_PAGES = 2,
+};
+
+enum rv_vdso_map {
+ RV_VDSO_MAP_VVAR = 0,
+ RV_VDSO_MAP_VDSO = 1,
+};
+
+struct __vdso_info {
+ const char *name;
+ const char *vdso_code_start;
+ const char *vdso_code_end;
+ long unsigned int vdso_pages;
+ struct vm_special_mapping *dm;
+ struct vm_special_mapping *cm;
+};
+
+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 used_bucket {
+ struct list_head head;
+ struct hlist_head *bucket;
+};
+
+struct relocation_head {
+ struct hlist_node node;
+ struct list_head *rel_entry;
+ void *location;
+};
+
+struct relocation_entry {
+ struct list_head head;
+ Elf64_Addr value;
+ unsigned int type;
+};
+
+struct relocation_handlers {
+ int (*reloc_handler)(struct module *, void *, Elf64_Addr);
+ int (*accumulate_handler)(struct module *, void *, long int);
+};
+
+struct pageattr_masks {
+ pgprot_t set_mask;
+ pgprot_t clear_mask;
+};
+
+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,
+};
+
+enum sysctl_writes_mode {
+ SYSCTL_WRITES_LEGACY = -1,
+ SYSCTL_WRITES_WARN = 0,
+ SYSCTL_WRITES_STRICT = 1,
+};
+
+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 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];
+};
+
+struct kmalloced_param {
+ struct list_head list;
+ char val[0];
+};
+
+struct smpboot_thread_data {
+ unsigned int cpu;
+ unsigned int status;
+ struct smp_hotplug_thread *ht;
+};
+
+enum {
+ HP_THREAD_NONE = 0,
+ HP_THREAD_ACTIVE = 1,
+ HP_THREAD_PARKED = 2,
+};
+
+enum uclamp_id {
+ UCLAMP_MIN = 0,
+ UCLAMP_MAX = 1,
+ UCLAMP_CNT = 2,
+};
+
+enum cpu_idle_type {
+ __CPU_NOT_IDLE = 0,
+ CPU_IDLE = 1,
+ CPU_NEWLY_IDLE = 2,
+ CPU_MAX_IDLE_TYPES = 3,
+};
+
+enum sched_tunable_scaling {
+ SCHED_TUNABLESCALING_NONE = 0,
+ SCHED_TUNABLESCALING_LOG = 1,
+ SCHED_TUNABLESCALING_LINEAR = 2,
+ SCHED_TUNABLESCALING_END = 3,
+};
+
+struct asym_cap_data {
+ struct list_head link;
+ struct callback_head rcu;
+ long unsigned int capacity;
+ long unsigned int cpus[0];
+};
+
+typedef struct {
+ struct rq *lock;
+ struct rq_flags rf;
+} class_rq_lock_irqsave_t;
+
+struct energy_env {
+ long unsigned int task_busy_time;
+ long unsigned int pd_busy_time;
+ long unsigned int cpu_cap;
+ long unsigned int pd_cap;
+};
+
+enum fbq_type {
+ regular = 0,
+ remote = 1,
+ all = 2,
+};
+
+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,
+};
+
+enum migration_type {
+ migrate_load = 0,
+ migrate_util = 1,
+ migrate_task = 2,
+ migrate_misfit = 3,
+};
+
+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 int 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 sg_lb_stats {
+ long unsigned int avg_load;
+ long unsigned int group_load;
+ long unsigned int group_capacity;
+ long unsigned int group_util;
+ long unsigned int 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;
+ long unsigned int group_misfit_task_load;
+};
+
+struct sd_lb_stats {
+ struct sched_group *busiest;
+ struct sched_group *local;
+ long unsigned int total_load;
+ long unsigned int total_capacity;
+ long unsigned int avg_load;
+ unsigned int prefer_sibling;
+ struct sg_lb_stats busiest_stat;
+ struct sg_lb_stats local_stat;
+};
+
+struct irqchip_fwid {
+ struct fwnode_handle fwnode;
+ unsigned int type;
+ char *name;
+ phys_addr_t *pa;
+};
+
+enum {
+ GP_IDLE = 0,
+ GP_ENTER = 1,
+ GP_PASSED = 2,
+ GP_EXIT = 3,
+ GP_REPLAY = 4,
+};
+
+struct module_sect_attr {
+ struct bin_attribute battr;
+ long unsigned int 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 ktime_timestamps {
+ u64 mono;
+ u64 boot;
+ u64 real;
+};
+
+struct system_time_snapshot {
+ u64 cycles;
+ ktime_t real;
+ ktime_t raw;
+ enum clocksource_ids cs_id;
+ unsigned int clock_was_set_seq;
+ u8 cs_was_changed_seq;
+};
+
+struct system_counterval_t {
+ u64 cycles;
+ enum clocksource_ids cs_id;
+ bool use_nsecs;
+};
+
+enum timekeeping_adv_mode {
+ TK_ADV_TICK = 0,
+ TK_ADV_FREQ = 1,
+};
+
+struct tk_fast {
+ seqcount_latch_t seq;
+ struct tk_read_base base[2];
+};
+
+struct sched_domain_attr {
+ int relax_domain_level;
+};
+
+struct uf_node {
+ struct uf_node *parent;
+ unsigned int rank;
+};
+
+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,
+ PERR_HKEEPING = 8,
+ PERR_ACCESS = 9,
+};
+
+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_EXCLUSIVE_CPULIST = 6,
+ FILE_EFFECTIVE_XCPULIST = 7,
+ FILE_ISOLATED_CPULIST = 8,
+ FILE_CPU_EXCLUSIVE = 9,
+ FILE_MEM_EXCLUSIVE = 10,
+ FILE_MEM_HARDWALL = 11,
+ FILE_SCHED_LOAD_BALANCE = 12,
+ FILE_PARTITION_ROOT = 13,
+ FILE_SCHED_RELAX_DOMAIN_LEVEL = 14,
+ FILE_MEMORY_PRESSURE_ENABLED = 15,
+ FILE_MEMORY_PRESSURE = 16,
+ FILE_SPREAD_PAGE = 17,
+ FILE_SPREAD_SLAB = 18,
+} cpuset_filetype_t;
+
+struct cpuset {
+ struct cgroup_subsys_state css;
+ long unsigned int flags;
+ cpumask_var_t cpus_allowed;
+ nodemask_t mems_allowed;
+ cpumask_var_t effective_cpus;
+ nodemask_t effective_mems;
+ cpumask_var_t effective_xcpus;
+ cpumask_var_t exclusive_cpus;
+ nodemask_t old_mems_allowed;
+ struct fmeter fmeter;
+ int attach_in_progress;
+ int relax_domain_level;
+ int nr_subparts;
+ int partition_root_state;
+ int nr_deadline_tasks;
+ int nr_migrate_dl_tasks;
+ u64 sum_migrate_dl_bw;
+ enum prs_errcode prs_err;
+ struct cgroup_file partition_file;
+ struct list_head remote_sibling;
+ struct uf_node node;
+};
+
+struct tmpmasks {
+ cpumask_var_t addmask;
+ cpumask_var_t delmask;
+ cpumask_var_t new_cpus;
+};
+
+enum partition_cmd {
+ partcmd_enable = 0,
+ partcmd_enablei = 1,
+ partcmd_disable = 2,
+ partcmd_update = 3,
+ partcmd_invalidate = 4,
+};
+
+struct cpuset_migrate_mm_work {
+ struct work_struct work;
+ struct mm_struct *mm;
+ nodemask_t from;
+ nodemask_t to;
+};
+
+enum bpf_cond_pseudo_jmp {
+ BPF_MAY_GOTO = 0,
+};
+
+enum bpf_addr_space_cast {
+ BPF_ADDR_SPACE_CAST = 1,
+};
+
+struct bpf_kfunc_desc {
+ struct btf_func_model func_model;
+ u32 func_id;
+ s32 imm;
+ u16 offset;
+ long unsigned int 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;
+};
+
+typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+
+struct bpf_bprintf_data {
+ u32 *bin_args;
+ char *buf;
+ bool get_bin_args;
+ bool get_buf;
+};
+
+enum bpf_stack_slot_type {
+ STACK_INVALID = 0,
+ STACK_SPILL = 1,
+ STACK_MISC = 2,
+ STACK_ZERO = 3,
+ STACK_DYNPTR = 4,
+ STACK_ITER = 5,
+};
+
+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;
+};
+
+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;
+};
+
+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_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;
+ struct {
+ struct bpf_map *ptr;
+ int uid;
+ } map;
+ u64 mem_size;
+};
+
+enum reg_arg_type {
+ SRC_OP = 0,
+ DST_OP = 1,
+ DST_OP_NO_MARK = 2,
+};
+
+struct linked_reg {
+ u8 frameno;
+ union {
+ u8 spi;
+ u8 regno;
+ };
+ bool is_reg;
+};
+
+struct linked_regs {
+ int cnt;
+ struct linked_reg entries[6];
+};
+
+enum bpf_access_src {
+ ACCESS_DIRECT = 1,
+ ACCESS_HELPER = 2,
+};
+
+struct task_struct__safe_rcu {
+ const cpumask_t *cpus_ptr;
+ struct css_set *cgroups;
+ struct task_struct *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 *exe_file;
+};
+
+struct sk_buff__safe_rcu_or_null {
+ struct sock *sk;
+};
+
+struct request_sock__safe_rcu_or_null {
+ struct sock *sk;
+};
+
+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_or_null {
+ struct sock *sk;
+};
+
+struct bpf_reg_types {
+ const enum bpf_reg_type types[10];
+ u32 *btf_id;
+};
+
+enum {
+ AT_PKT_END = -1,
+ BEYOND_PKT_END = -2,
+};
+
+typedef int (*set_callee_state_fn)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *, int);
+
+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,
+ KF_ARG_WORKQUEUE_ID = 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,
+ KF_ARG_PTR_TO_NULL = 13,
+ KF_ARG_PTR_TO_CONST_STR = 14,
+ KF_ARG_PTR_TO_MAP = 15,
+ KF_ARG_PTR_TO_WORKQUEUE = 16,
+};
+
+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,
+ KF_bpf_percpu_obj_new_impl = 19,
+ KF_bpf_percpu_obj_drop_impl = 20,
+ KF_bpf_throw = 21,
+ KF_bpf_wq_set_callback_impl = 22,
+ KF_bpf_preempt_disable = 23,
+ KF_bpf_preempt_enable = 24,
+ KF_bpf_iter_css_task_new = 25,
+ KF_bpf_session_cookie = 26,
+};
+
+enum {
+ REASON_BOUNDS = -1,
+ REASON_TYPE = -2,
+ REASON_PATHS = -3,
+ REASON_LIMIT = -4,
+ REASON_STACK = -5,
+};
+
+struct bpf_sanitize_info {
+ struct bpf_insn_aux_data aux;
+ bool mask_to_left;
+};
+
+enum {
+ DISCOVERED = 16,
+ EXPLORED = 32,
+ FALLTHROUGH = 1,
+ BRANCH = 2,
+};
+
+enum {
+ DONE_EXPLORING = 0,
+ KEEP_EXPLORING = 1,
+};
+
+enum exact_level {
+ NOT_EXACT = 0,
+ EXACT = 1,
+ RANGE_WITHIN = 2,
+};
+
+struct bpf_iter;
+
+struct bpf_queue_stack {
+ struct bpf_map map;
+ raw_spinlock_t lock;
+ u32 head;
+ u32 tail;
+ u32 size;
+ long: 0;
+ char elements[0];
+};
+
+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 *);
+
+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 btf_relocate {
+ struct btf *btf;
+ const struct btf *base_btf;
+ const struct btf *dist_base_btf;
+ unsigned int nr_base_types;
+ unsigned int nr_split_types;
+ unsigned int nr_dist_base_types;
+ int dist_str_len;
+ int base_str_len;
+ __u32 *id_map;
+ __u32 *str_map;
+};
+
+struct btf_name_info {
+ const char *name;
+ bool needs_size: 1;
+ unsigned int size: 31;
+ __u32 id;
+};
+
+typedef union {
+} release_pages_arg;
+
+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 lru_activate;
+ local_lock_t lock_irq;
+ struct folio_batch lru_move_tail;
+};
+
+typedef void (*move_fn_t)(struct lruvec *, struct folio *);
+
+struct pcpu_group_info {
+ int nr_units;
+ long unsigned int 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];
+};
+
+typedef int pcpu_fc_cpu_to_node_fn_t(int);
+
+typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
+
+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 pcpuobj_ext {
+ struct obj_cgroup *cgroup;
+};
+
+struct pcpu_chunk {
+ struct list_head list;
+ int free_bytes;
+ struct pcpu_block_md chunk_md;
+ long unsigned int *bound_map;
+ void *base_addr;
+ long unsigned int *alloc_map;
+ struct pcpu_block_md *md_blocks;
+ void *data;
+ bool immutable;
+ bool isolated;
+ int start_offset;
+ int end_offset;
+ struct pcpuobj_ext *obj_exts;
+ int nr_pages;
+ int nr_populated;
+ int nr_empty_pop_pages;
+ long unsigned int populated[0];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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;
+};
+
+struct pages_or_folios {
+ union {
+ struct page **pages;
+ struct folio **folios;
+ void **entries;
+ };
+ bool has_folios;
+ long int nr_entries;
+};
+
+enum pgt_entry {
+ NORMAL_PMD = 0,
+ HPAGE_PMD = 1,
+ NORMAL_PUD = 2,
+ HPAGE_PUD = 3,
+};
+
+struct anon_vma_chain {
+ struct vm_area_struct *vma;
+ struct anon_vma *anon_vma;
+ struct list_head same_vma;
+ struct rb_node rb;
+ long unsigned int rb_subtree_last;
+};
+
+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 unlink_vma_file_batch {
+ int count;
+ struct vm_area_struct *vmas[8];
+};
+
+typedef int cydp_t;
+
+typedef int fpb_t;
+
+struct madvise_walk_private {
+ struct mmu_gather *tlb;
+ bool pageout;
+};
+
+struct resv_map {
+ struct kref refs;
+ spinlock_t lock;
+ struct list_head regions;
+ long int adds_in_progress;
+ struct list_head region_cache;
+ long int region_cache_count;
+ struct rw_semaphore rw_sema;
+ struct page_counter *reservation_counter;
+ long unsigned int pages_per_hpage;
+ struct cgroup_subsys_state *css;
+};
+
+struct file_region {
+ struct list_head link;
+ long int from;
+ long int to;
+ struct page_counter *reservation_counter;
+ struct cgroup_subsys_state *css;
+};
+
+struct hugetlb_vma_lock {
+ struct kref refs;
+ struct rw_semaphore rw_sema;
+ struct vm_area_struct *vma;
+};
+
+enum hugetlb_page_flags {
+ HPG_restore_reserve = 0,
+ HPG_migratable = 1,
+ HPG_temporary = 2,
+ HPG_freed = 3,
+ HPG_vmemmap_optimized = 4,
+ HPG_raw_hwp_unreliable = 5,
+ __NR_HPAGEFLAGS = 6,
+};
+
+struct huge_bootmem_page {
+ struct list_head list;
+ struct hstate *hstate;
+};
+
+enum hugetlb_memory_event {
+ HUGETLB_MAX = 0,
+ HUGETLB_NR_MEMORY_EVENTS = 1,
+};
+
+struct hugetlb_cgroup_per_node {
+ long unsigned int usage[3];
+};
+
+struct hugetlb_cgroup {
+ struct cgroup_subsys_state css;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct page_counter hugepage[3];
+ struct page_counter rsvd_hugepage[3];
+ atomic_long_t events[3];
+ atomic_long_t events_local[3];
+ struct cgroup_file events_file[3];
+ struct cgroup_file events_local_file[3];
+ struct hugetlb_cgroup_per_node *nodeinfo[0];
+};
+
+enum vma_resv_mode {
+ VMA_NEEDS_RESV = 0,
+ VMA_COMMIT_RESV = 1,
+ VMA_END_RESV = 2,
+ VMA_ADD_RESV = 3,
+ VMA_DEL_RESV = 4,
+};
+
+typedef s32 compat_off_t;
+
+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;
+};
+
+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;
+};
+
+enum {
+ LAST_NORM = 0,
+ LAST_ROOT = 1,
+ LAST_DOT = 2,
+ LAST_DOTDOT = 3,
+};
+
+enum {
+ WALK_TRAILING = 1,
+ WALK_MORE = 2,
+ WALK_NOFOLLOW = 4,
+};
+
+struct partial_page {
+ unsigned int offset;
+ unsigned int len;
+ long unsigned int private;
+};
+
+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);
+};
+
+typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);
+
+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;
+};
+
+struct fs_error_report {
+ int error;
+ struct inode *inode;
+ struct super_block *sb;
+};
+
+typedef struct fsnotify_mark_connector *fsnotify_connp_t;
+
+struct kioctx;
+
+struct kioctx_table {
+ struct callback_head rcu;
+ unsigned int nr;
+ struct kioctx *table[0];
+};
+
+typedef u32 compat_aio_context_t;
+
+typedef __kernel_ulong_t aio_context_t;
+
+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 io_event {
+ __u64 data;
+ __u64 obj;
+ __s64 res;
+ __s64 res2;
+};
+
+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;
+};
+
+typedef int kiocb_cancel_fn(struct kiocb *);
+
+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 kioctx_cpu;
+
+struct ctx_rq_wait;
+
+struct kioctx {
+ struct percpu_ref users;
+ atomic_t dead;
+ struct percpu_ref reqs;
+ long unsigned int user_id;
+ struct kioctx_cpu *cpu;
+ unsigned int req_batch;
+ unsigned int max_reqs;
+ unsigned int nr_events;
+ long unsigned int mmap_base;
+ long unsigned int mmap_size;
+ struct folio **ring_folios;
+ long int nr_pages;
+ struct rcu_work free_rwork;
+ struct ctx_rq_wait *rq_wait;
+ long: 64;
+ long: 64;
+ 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;
+ };
+ struct {
+ struct mutex ring_lock;
+ wait_queue_head_t wait;
+ 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;
+ };
+ struct folio *internal_folios[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;
+};
+
+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;
+};
+
+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;
+};
+
+struct aio_waiter {
+ struct wait_queue_entry w;
+ size_t min_nr;
+};
+
+struct aio_poll_table {
+ struct poll_table_struct pt;
+ struct aio_kiocb *iocb;
+ bool queued;
+ int error;
+};
+
+struct __aio_sigset {
+ const sigset_t *sigmask;
+ size_t sigsetsize;
+};
+
+struct __compat_aio_sigset {
+ compat_uptr_t sigmask;
+ compat_size_t sigsetsize;
+};
+
+struct proc_fs_context {
+ struct pid_namespace *pid_ns;
+ unsigned int mask;
+ enum proc_hidepid hidepid;
+ int gid;
+ enum proc_pidonly pidonly;
+};
+
+enum proc_param {
+ Opt_gid___4 = 0,
+ Opt_hidepid = 1,
+ Opt_subset = 2,
+};
+
+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;
+};
+
+typedef struct {
+ __le32 *p;
+ __le32 key;
+ struct buffer_head *bh;
+} Indirect;
+
+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;
+};
+
+enum {
+ EXT4_MF_MNTDIR_SAMPLED = 0,
+ EXT4_MF_FC_INELIGIBLE = 1,
+};
+
+struct ext4_dir_entry {
+ __le32 inode;
+ __le16 rec_len;
+ __le16 name_len;
+ char name[255];
+};
+
+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 ext4_filename {
+ const struct qstr *usr_fname;
+ struct fscrypt_str disk_name;
+ struct dx_hash_info hinfo;
+};
+
+typedef enum {
+ EITHER = 0,
+ INDEX = 1,
+ DIRENT = 2,
+ DIRENT_HTREE = 3,
+} dirblock_type_t;
+
+struct fake_dirent {
+ __le32 inode;
+ __le16 rec_len;
+ u8 name_len;
+ u8 file_type;
+};
+
+struct dx_countlimit {
+ __le16 limit;
+ __le16 count;
+};
+
+struct dx_entry {
+ __le32 hash;
+ __le32 block;
+};
+
+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_frame {
+ struct buffer_head *bh;
+ struct dx_entry *entries;
+ struct dx_entry *at;
+};
+
+struct dx_map_entry {
+ u32 hash;
+ u16 offs;
+ u16 size;
+};
+
+struct dx_tail {
+ u32 dt_reserved;
+ __le32 dt_checksum;
+};
+
+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;
+};
+
+struct ext4_fc_tl {
+ __le16 fc_tag;
+ __le16 fc_len;
+};
+
+struct ext4_fc_head {
+ __le32 fc_features;
+ __le32 fc_tid;
+};
+
+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 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_fc_tail {
+ __le32 fc_tid;
+ __le32 fc_crc;
+};
+
+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[40];
+ 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 dentry_info_args {
+ int parent_ino;
+ int dname_len;
+ int ino;
+ int inode_len;
+ char *dname;
+};
+
+struct ext4_fc_tl_mem {
+ u16 fc_tag;
+ u16 fc_len;
+};
+
+struct ramfs_mount_opts {
+ umode_t mode;
+};
+
+struct ramfs_fs_info {
+ struct ramfs_mount_opts mount_opts;
+};
+
+enum ramfs_param {
+ Opt_mode___3 = 0,
+};
+
+typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
+
+enum {
+ DIO_LOCKING = 1,
+ DIO_SKIP_HOLES = 2,
+};
+
+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_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___2 = 0,
+ Opt_uid___4 = 1,
+ Opt_gid___5 = 2,
+ Opt_umask = 3,
+ Opt_dmask = 4,
+ Opt_fmask = 5,
+ Opt_allow_utime = 6,
+ Opt_codepage = 7,
+ Opt_usefree = 8,
+ Opt_nocase = 9,
+ Opt_quiet = 10,
+ Opt_showexec = 11,
+ Opt_debug___2 = 12,
+ Opt_immutable = 13,
+ Opt_dots = 14,
+ Opt_dotsOK = 15,
+ Opt_charset = 16,
+ Opt_shortname = 17,
+ Opt_utf8___2 = 18,
+ Opt_utf8_bool = 19,
+ Opt_uni_xl = 20,
+ Opt_uni_xl_bool = 21,
+ Opt_nonumtail = 22,
+ Opt_nonumtail_bool = 23,
+ Opt_obsolete = 24,
+ Opt_flush = 25,
+ Opt_tz = 26,
+ Opt_rodir = 27,
+ Opt_errors = 28,
+ Opt_discard = 29,
+ Opt_nfs = 30,
+ Opt_nfs_enum = 31,
+ Opt_time_offset = 32,
+ Opt_dos1xfloppy = 33,
+};
+
+enum opentype4 {
+ NFS4_OPEN_NOCREATE = 0,
+ NFS4_OPEN_CREATE = 1,
+};
+
+enum limit_by4 {
+ NFS4_LIMIT_SIZE = 1,
+ NFS4_LIMIT_BLOCKS = 2,
+};
+
+enum why_no_delegation4 {
+ WND4_NOT_WANTED = 0,
+ WND4_CONTENTION = 1,
+ WND4_RESOURCE = 2,
+ WND4_NOT_SUPP_FTYPE = 3,
+ WND4_WRITE_DELEG_NOT_SUPP_FTYPE = 4,
+ WND4_NOT_SUPP_UPGRADE = 5,
+ WND4_NOT_SUPP_DOWNGRADE = 6,
+ WND4_CANCELLED = 7,
+ WND4_IS_DIR = 8,
+};
+
+enum lock_type4 {
+ NFS4_UNLOCK_LT = 0,
+ NFS4_READ_LT = 1,
+ NFS4_WRITE_LT = 2,
+ NFS4_READW_LT = 3,
+ NFS4_WRITEW_LT = 4,
+};
+
+enum nfs4_setxattr_options {
+ SETXATTR4_EITHER = 0,
+ SETXATTR4_CREATE = 1,
+ SETXATTR4_REPLACE = 2,
+};
+
+struct compound_hdr {
+ int32_t status;
+ uint32_t nops;
+ __be32 *nops_p;
+ uint32_t taglen;
+ char *tag;
+ uint32_t replen;
+ u32 minorversion;
+};
+
+struct read_plus_segment {
+ enum data_content4 type;
+ uint64_t offset;
+ union {
+ struct {
+ uint64_t length;
+ } hole;
+ struct {
+ uint32_t length;
+ unsigned int from;
+ } data;
+ };
+};
+
+struct nlm_wait {
+ struct list_head b_list;
+ wait_queue_head_t b_wait;
+ struct nlm_host *b_host;
+ struct file_lock *b_lock;
+ __be32 b_status;
+};
+
+typedef u32 unicode_t;
+
+struct utf8_table {
+ int cmask;
+ int cval;
+ int shift;
+ long int lmask;
+ long int lval;
+};
+
+struct args_protover {
+ __u32 version;
+};
+
+struct args_protosubver {
+ __u32 sub_version;
+};
+
+struct args_openmount {
+ __u32 devid;
+};
+
+struct args_ready {
+ __u32 token;
+};
+
+struct args_fail {
+ __u32 token;
+ __s32 status;
+};
+
+struct args_setpipefd {
+ __s32 pipefd;
+};
+
+struct args_timeout {
+ __u64 timeout;
+};
+
+struct args_requester {
+ __u32 uid;
+ __u32 gid;
+};
+
+struct args_expire {
+ __u32 how;
+};
+
+struct args_askumount {
+ __u32 may_umount;
+};
+
+struct args_in {
+ __u32 type;
+};
+
+struct args_out {
+ __u32 devid;
+ __u32 magic;
+};
+
+struct args_ismountpoint {
+ union {
+ struct args_in in;
+ struct args_out out;
+ };
+};
+
+struct autofs_dev_ioctl {
+ __u32 ver_major;
+ __u32 ver_minor;
+ __u32 size;
+ __s32 ioctlfd;
+ union {
+ struct args_protover protover;
+ struct args_protosubver protosubver;
+ struct args_openmount openmount;
+ struct args_ready ready;
+ struct args_fail fail;
+ struct args_setpipefd setpipefd;
+ struct args_timeout timeout;
+ struct args_requester requester;
+ struct args_expire expire;
+ struct args_askumount askumount;
+ struct args_ismountpoint ismountpoint;
+ };
+ char path[0];
+};
+
+enum {
+ AUTOFS_DEV_IOCTL_VERSION_CMD = 113,
+ AUTOFS_DEV_IOCTL_PROTOVER_CMD = 114,
+ AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD = 115,
+ AUTOFS_DEV_IOCTL_OPENMOUNT_CMD = 116,
+ AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD = 117,
+ AUTOFS_DEV_IOCTL_READY_CMD = 118,
+ AUTOFS_DEV_IOCTL_FAIL_CMD = 119,
+ AUTOFS_DEV_IOCTL_SETPIPEFD_CMD = 120,
+ AUTOFS_DEV_IOCTL_CATATONIC_CMD = 121,
+ AUTOFS_DEV_IOCTL_TIMEOUT_CMD = 122,
+ AUTOFS_DEV_IOCTL_REQUESTER_CMD = 123,
+ AUTOFS_DEV_IOCTL_EXPIRE_CMD = 124,
+ AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD = 125,
+ AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD = 126,
+};
+
+typedef int (*ioctl_fn)(struct file *, struct autofs_sb_info *, struct autofs_dev_ioctl *);
+
+typedef int __kernel_ipc_pid_t;
+
+struct msgbuf {
+ __kernel_long_t mtype;
+ char mtext[1];
+};
+
+struct msg;
+
+struct msqid_ds {
+ struct ipc_perm msg_perm;
+ struct msg *msg_first;
+ struct msg *msg_last;
+ __kernel_old_time_t msg_stime;
+ __kernel_old_time_t msg_rtime;
+ __kernel_old_time_t msg_ctime;
+ long unsigned int msg_lcbytes;
+ long unsigned int msg_lqbytes;
+ short unsigned int msg_cbytes;
+ short unsigned int msg_qnum;
+ short unsigned int msg_qbytes;
+ __kernel_ipc_pid_t msg_lspid;
+ __kernel_ipc_pid_t msg_lrpid;
+};
+
+struct msqid64_ds {
+ struct ipc64_perm msg_perm;
+ long int msg_stime;
+ long int msg_rtime;
+ long int msg_ctime;
+ long unsigned int msg_cbytes;
+ long unsigned int msg_qnum;
+ long unsigned int msg_qbytes;
+ __kernel_pid_t msg_lspid;
+ __kernel_pid_t msg_lrpid;
+ long unsigned int __unused4;
+ long unsigned int __unused5;
+};
+
+struct msginfo {
+ int msgpool;
+ int msgmap;
+ int msgmax;
+ int msgmnb;
+ int msgmni;
+ int msgssz;
+ int msgtql;
+ short unsigned int msgseg;
+};
+
+typedef s32 compat_ipc_pid_t;
+
+struct compat_msqid64_ds {
+ struct compat_ipc64_perm msg_perm;
+ compat_ulong_t msg_stime;
+ compat_ulong_t msg_stime_high;
+ compat_ulong_t msg_rtime;
+ compat_ulong_t msg_rtime_high;
+ compat_ulong_t msg_ctime;
+ compat_ulong_t msg_ctime_high;
+ compat_ulong_t msg_cbytes;
+ compat_ulong_t msg_qnum;
+ compat_ulong_t msg_qbytes;
+ compat_pid_t msg_lspid;
+ compat_pid_t msg_lrpid;
+ compat_ulong_t __unused4;
+ compat_ulong_t __unused5;
+};
+
+struct msg_queue {
+ struct kern_ipc_perm q_perm;
+ time64_t q_stime;
+ time64_t q_rtime;
+ time64_t q_ctime;
+ long unsigned int q_cbytes;
+ long unsigned int q_qnum;
+ long unsigned int q_qbytes;
+ struct pid *q_lspid;
+ struct pid *q_lrpid;
+ struct list_head q_messages;
+ struct list_head q_receivers;
+ struct list_head q_senders;
+ long: 64;
+ long: 64;
+};
+
+struct msg_receiver {
+ struct list_head r_list;
+ struct task_struct *r_tsk;
+ int r_mode;
+ long int r_msgtype;
+ long int r_maxsize;
+ struct msg_msg *r_msg;
+};
+
+struct msg_sender {
+ struct list_head list;
+ struct task_struct *tsk;
+ size_t msgsz;
+};
+
+struct compat_msqid_ds {
+ struct compat_ipc_perm msg_perm;
+ compat_uptr_t msg_first;
+ compat_uptr_t msg_last;
+ old_time32_t msg_stime;
+ old_time32_t msg_rtime;
+ old_time32_t msg_ctime;
+ compat_ulong_t msg_lcbytes;
+ compat_ulong_t msg_lqbytes;
+ short unsigned int msg_cbytes;
+ short unsigned int msg_qnum;
+ short unsigned int msg_qbytes;
+ compat_ipc_pid_t msg_lspid;
+ compat_ipc_pid_t msg_lrpid;
+};
+
+struct compat_msgbuf {
+ compat_long_t mtype;
+ char mtext[1];
+};
+
+enum key_lookup_flag {
+ KEY_LOOKUP_CREATE = 1,
+ KEY_LOOKUP_PARTIAL = 2,
+ KEY_LOOKUP_ALL = 3,
+};
+
+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 netnode_security_struct {
+ union {
+ __be32 ipv4;
+ struct in6_addr ipv6;
+ } addr;
+ u32 sid;
+ u16 family;
+};
+
+struct sel_netnode_bkt {
+ unsigned int size;
+ struct list_head list;
+};
+
+struct sel_netnode {
+ struct netnode_security_struct nsec;
+ struct list_head list;
+ struct callback_head rcu;
+};
+
+struct perm_datum {
+ u32 value;
+};
+
+struct role_trans_key {
+ u32 role;
+ u32 type;
+ u32 tclass;
+};
+
+struct role_trans_datum {
+ u32 new_role;
+};
+
+struct filename_trans_key {
+ u32 ttype;
+ u16 tclass;
+ const char *name;
+};
+
+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 cat_datum {
+ u32 value;
+ unsigned char isalias;
+};
+
+struct range_trans {
+ u32 source_type;
+ u32 target_type;
+ u32 target_class;
+};
+
+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 policy_data {
+ struct policydb *p;
+ void *fp;
+};
+
+struct cond_expr_node {
+ u32 expr_type;
+ u32 boolean;
+};
+
+struct policydb_compat_info {
+ unsigned int version;
+ unsigned int sym_num;
+ unsigned int ocon_num;
+};
+
+struct cred_label {
+ const struct cred *cred;
+ struct aa_label *label;
+};
+
+enum devcg_behavior {
+ DEVCG_DEFAULT_NONE = 0,
+ DEVCG_DEFAULT_ALLOW = 1,
+ DEVCG_DEFAULT_DENY = 2,
+};
+
+struct dev_exception_item {
+ u32 major;
+ u32 minor;
+ short int type;
+ short int access;
+ struct list_head list;
+ struct callback_head rcu;
+};
+
+struct dev_cgroup {
+ struct cgroup_subsys_state css;
+ struct list_head exceptions;
+ enum devcg_behavior behavior;
+};
+
+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 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 aead_engine_alg {
+ struct aead_alg base;
+ struct crypto_engine_op op;
+};
+
+struct ahash_engine_alg {
+ struct ahash_alg base;
+ struct crypto_engine_op op;
+};
+
+struct kpp_engine_alg {
+ struct kpp_alg base;
+ struct crypto_engine_op op;
+};
+
+struct skcipher_engine_alg {
+ struct skcipher_alg base;
+ struct crypto_engine_op op;
+};
+
+struct crypto_engine_alg {
+ struct crypto_alg base;
+ struct crypto_engine_op op;
+};
+
+struct shash_instance {
+ void (*free)(struct shash_instance *);
+ union {
+ struct {
+ char head[104];
+ struct crypto_instance base;
+ } s;
+ struct shash_alg alg;
+ };
+};
+
+struct crypto_shash_spawn {
+ struct crypto_spawn base;
+};
+
+struct crypto_scomp {
+ struct crypto_tfm base;
+};
+
+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 scomp_scratch {
+ spinlock_t lock;
+ void *src;
+ void *dst;
+};
+
+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;
+};
+
+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,
+};
+
+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_stat_callback {
+ struct list_head list;
+ struct timer_list timer;
+ struct blk_rq_stat *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;
+};
+
+enum {
+ IOPRIO_WHO_PROCESS = 1,
+ IOPRIO_WHO_PGRP = 2,
+ IOPRIO_WHO_USER = 3,
+};
+
+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;
+};
+
+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 bfq_entity;
+
+struct bfq_service_tree {
+ struct rb_root active;
+ struct rb_root idle;
+ struct bfq_entity *first_idle;
+ struct bfq_entity *last_idle;
+ u64 vtime;
+ long unsigned int wsum;
+};
+
+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_sched_data {
+ struct bfq_entity *in_service_entity;
+ struct bfq_entity *next_in_service;
+ struct bfq_service_tree service_tree[3];
+ long unsigned int bfq_class_idle_last_service;
+};
+
+struct bfq_weight_counter {
+ unsigned int weight;
+ unsigned int num_active;
+ struct rb_node weights_node;
+};
+
+struct bfq_ttime {
+ u64 last_end_request;
+ u64 ttime_total;
+ long unsigned int ttime_samples;
+ u64 ttime_mean;
+};
+
+struct bfq_data;
+
+struct bfq_io_cq;
+
+struct bfq_queue {
+ int ref;
+ int stable_ref;
+ struct bfq_data *bfqd;
+ short unsigned int ioprio;
+ short unsigned int ioprio_class;
+ short unsigned int new_ioprio;
+ short unsigned int new_ioprio_class;
+ u64 last_serv_time_ns;
+ unsigned int inject_limit;
+ long unsigned int 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;
+ long unsigned int budget_timeout;
+ int dispatched;
+ long unsigned int 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;
+ long unsigned int wr_cur_max_time;
+ long unsigned int soft_rt_next_start;
+ long unsigned int last_wr_start_finish;
+ unsigned int wr_coeff;
+ long unsigned int last_idle_bklogged;
+ long unsigned int service_from_backlogged;
+ long unsigned int service_from_wr;
+ long unsigned int wr_start_at_switch_to_srt;
+ long unsigned int split_time;
+ long unsigned int first_IO_time;
+ long unsigned int 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;
+ long unsigned int 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;
+ long unsigned int last_ins_in_burst;
+ long unsigned int bfq_burst_interval;
+ int burst_size;
+ struct bfq_entity *burst_parent_entity;
+ long unsigned int 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;
+ long unsigned int 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_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;
+ long unsigned int saved_wr_coeff;
+ long unsigned int saved_last_wr_start_finish;
+ long unsigned int saved_service_from_wr;
+ long unsigned int 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;
+ long unsigned int 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 bfqg_stats {
+ struct blkg_rwstat bytes;
+ struct blkg_rwstat ios;
+};
+
+struct bfq_group {
+ struct blkg_policy_data pd;
+ 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;
+};
+
+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_group_data {
+ struct blkcg_policy_data pd;
+ unsigned int weight;
+};
+
+enum io_uring_register_pbuf_ring_flags {
+ IOU_PBUF_RING_MMAP = 1,
+ IOU_PBUF_RING_INC = 2,
+};
+
+struct io_uring_buf_reg {
+ __u64 ring_addr;
+ __u32 ring_entries;
+ __u16 bgid;
+ __u16 flags;
+ __u64 resv[3];
+};
+
+struct io_uring_buf_status {
+ __u32 buf_group;
+ __u32 head;
+ __u32 resv[8];
+};
+
+struct io_provide_buf {
+ struct file *file;
+ __u64 addr;
+ __u32 len;
+ __u32 bgid;
+ __u32 nbufs;
+ __u16 bid;
+};
+
+enum {
+ IO_APOLL_OK = 0,
+ IO_APOLL_ABORTED = 1,
+ IO_APOLL_READY = 2,
+};
+
+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;
+};
+
+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 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 stx_subvol;
+ __u32 stx_atomic_write_unit_min;
+ __u32 stx_atomic_write_unit_max;
+ __u32 stx_atomic_write_segments_max;
+ __u32 __spare1[1];
+ __u64 __spare3[9];
+};
+
+struct io_statx {
+ struct file *file;
+ int dfd;
+ unsigned int mask;
+ unsigned int flags;
+ struct filename *filename;
+ struct statx *buffer;
+};
+
+enum io_wq_type {
+ IO_WQ_BOUND = 0,
+ IO_WQ_UNBOUND = 1,
+};
+
+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;
+ long unsigned int flags;
+};
+
+struct io_wq {
+ long unsigned int 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;
+};
+
+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_wq_cancel {
+ IO_WQ_CANCEL_OK = 0,
+ IO_WQ_CANCEL_RUNNING = 1,
+ IO_WQ_CANCEL_NOTFOUND = 2,
+};
+
+typedef bool work_cancel_fn(struct io_wq_work *, void *);
+
+enum {
+ IO_WORKER_F_UP = 0,
+ IO_WORKER_F_RUNNING = 1,
+ IO_WORKER_F_FREE = 2,
+ IO_WORKER_F_BOUND = 3,
+};
+
+enum {
+ IO_WQ_BIT_EXIT = 0,
+};
+
+enum {
+ IO_ACCT_STALLED_BIT = 0,
+};
+
+struct io_worker {
+ refcount_t ref;
+ int create_index;
+ long 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;
+ raw_spinlock_t lock;
+ struct completion ref_done;
+ long unsigned int create_state;
+ struct callback_head create_work;
+ int init_retries;
+ union {
+ struct callback_head rcu;
+ struct work_struct work;
+ };
+};
+
+enum {
+ IO_WQ_ACCT_BOUND = 0,
+ IO_WQ_ACCT_UNBOUND = 1,
+ IO_WQ_ACCT_NR = 2,
+};
+
+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 strarray {
+ char **array;
+ size_t n;
+};
+
+typedef struct {
+ S16 norm[53];
+ U32 wksp[285];
+} ZSTD_BuildCTableWksp;
+
+typedef struct {
+ U32 litLength;
+ U32 matchLength;
+} ZSTD_sequenceLength;
+
+typedef struct {
+ U64 rolling;
+ U64 stopMask;
+} ldmRollingHashState_t;
+
+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 struct {
+ size_t compressedSize;
+ long long unsigned int 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 unsigned int FSE_DTable;
+
+typedef struct {
+ size_t state;
+ const void *table;
+} FSE_DState_t;
+
+typedef struct {
+ U16 tableLog;
+ U16 fastMode;
+} FSE_DTableHeader;
+
+typedef struct {
+ short unsigned int newState;
+ unsigned char symbol;
+ unsigned char nbBits;
+} FSE_decode_t;
+
+typedef struct {
+ short int ncount[256];
+ FSE_DTable dtable[0];
+} FSE_DecompressWksp;
+
+typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
+
+typedef void sg_free_fn(struct scatterlist *, unsigned int);
+
+struct sg_pool {
+ size_t size;
+ char *name;
+ struct kmem_cache *slab;
+ mempool_t *pool;
+};
+
+typedef u16 ucs2_char_t;
+
+enum acpi_madt_rintc_version {
+ ACPI_MADT_RINTC_VERSION_NONE = 0,
+ ACPI_MADT_RINTC_VERSION_V1 = 1,
+ ACPI_MADT_RINTC_VERSION_RESERVED = 2,
+};
+
+struct rintc_data {
+ union {
+ u32 ext_intc_id;
+ struct {
+ u32 context_id: 16;
+ u32 reserved: 8;
+ u32 aplic_plic_id: 8;
+ };
+ };
+ long unsigned int hart_id;
+ u64 imsic_addr;
+ u32 imsic_size;
+};
+
+struct starfive_irq_chip {
+ void *base;
+ struct irq_domain *domain;
+ raw_spinlock_t lock;
+};
+
+typedef struct {
+ struct srcu_struct *lock;
+ int idx;
+} class_srcu_t;
+
+struct gpiochip_info {
+ char name[32];
+ char label[32];
+ __u32 lines;
+};
+
+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,
+};
+
+struct gpio_v2_line_values {
+ __u64 bits;
+ __u64 mask;
+};
+
+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,
+};
+
+struct gpio_v2_line_attribute {
+ __u32 id;
+ __u32 padding;
+ union {
+ __u64 flags;
+ __u64 values;
+ __u32 debounce_period_us;
+ };
+};
+
+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 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];
+};
+
+enum gpio_v2_line_changed_type {
+ GPIO_V2_LINE_CHANGED_REQUESTED = 1,
+ GPIO_V2_LINE_CHANGED_RELEASED = 2,
+ GPIO_V2_LINE_CHANGED_CONFIG = 3,
+};
+
+struct gpio_v2_line_info_changed {
+ struct gpio_v2_line_info info;
+ __u64 timestamp_ns;
+ __u32 event_type;
+ __u32 padding[5];
+};
+
+enum gpio_v2_line_event_id {
+ GPIO_V2_LINE_EVENT_RISING_EDGE = 1,
+ GPIO_V2_LINE_EVENT_FALLING_EDGE = 2,
+};
+
+struct gpio_v2_line_event {
+ __u64 timestamp_ns;
+ __u32 id;
+ __u32 offset;
+ __u32 seqno;
+ __u32 line_seqno;
+ __u32 padding[6];
+};
+
+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];
+};
+
+struct gpiohandle_request {
+ __u32 lineoffsets[64];
+ __u32 flags;
+ __u8 default_values[64];
+ char consumer_label[32];
+ __u32 lines;
+ int fd;
+};
+
+struct gpiohandle_config {
+ __u32 flags;
+ __u8 default_values[64];
+ __u32 padding[4];
+};
+
+struct gpiohandle_data {
+ __u8 values[64];
+};
+
+struct gpioevent_request {
+ __u32 lineoffset;
+ __u32 handleflags;
+ __u32 eventflags;
+ char consumer_label[32];
+ int fd;
+};
+
+struct gpioevent_data {
+ __u64 timestamp;
+ __u32 id;
+};
+
+struct gpio_chip_guard {
+ struct gpio_device *gdev;
+ struct gpio_chip *gc;
+ int idx;
+};
+
+typedef struct gpio_chip_guard class_gpio_chip_guard_t;
+
+struct linehandle_state {
+ struct gpio_device *gdev;
+ const char *label;
+ struct gpio_desc *descs[64];
+ u32 num_descs;
+};
+
+struct linereq;
+
+struct line {
+ struct rb_node node;
+ 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 debounce_period_us;
+ unsigned int sw_debounced;
+ unsigned int level;
+};
+
+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 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 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;
+ long unsigned int *watched_lines;
+ atomic_t watch_abi_version;
+};
+
+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,
+};
+
+typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
+
+struct pcie_tlp_log {
+ u32 dw[4];
+};
+
+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_reset_fn_method {
+ int (*reset_fn)(struct pci_dev *, bool);
+ char *name;
+};
+
+struct pci_pme_device {
+ struct list_head list;
+ struct pci_dev *dev;
+};
+
+struct pci_acs {
+ u16 cap;
+ u16 ctrl;
+ u16 fw_ctrl;
+};
+
+struct pci_saved_state {
+ u32 config_space[16];
+ struct pci_cap_saved_data cap[0];
+};
+
+struct pcim_iomap_devres {
+ void *table[6];
+};
+
+struct pcim_intx_devres {
+ int orig_intx;
+};
+
+enum pcim_addr_devres_type {
+ PCIM_ADDR_DEVRES_TYPE_INVALID = 0,
+ PCIM_ADDR_DEVRES_TYPE_REGION = 1,
+ PCIM_ADDR_DEVRES_TYPE_REGION_MAPPING = 2,
+ PCIM_ADDR_DEVRES_TYPE_MAPPING = 3,
+};
+
+struct pcim_addr_devres {
+ enum pcim_addr_devres_type type;
+ void *baseaddr;
+ long unsigned int offset;
+ long unsigned int len;
+ int bar;
+};
+
+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;
+};
+
+enum plda_int_event {
+ PLDA_AXI_POST_ERR = 0,
+ PLDA_AXI_FETCH_ERR = 1,
+ PLDA_AXI_DISCARD_ERR = 2,
+ PLDA_AXI_DOORBELL = 3,
+ PLDA_PCIE_POST_ERR = 4,
+ PLDA_PCIE_FETCH_ERR = 5,
+ PLDA_PCIE_DISCARD_ERR = 6,
+ PLDA_PCIE_DOORBELL = 7,
+ PLDA_INTX = 8,
+ PLDA_MSI = 9,
+ PLDA_AER_EVENT = 10,
+ PLDA_MISC_EVENTS = 11,
+ PLDA_SYS_ERR = 12,
+ PLDA_INT_EVENT_NUM = 13,
+};
+
+struct plda_pcie_rp;
+
+struct plda_event_ops {
+ u32 (*get_events)(struct plda_pcie_rp *);
+};
+
+struct plda_msi {
+ struct mutex lock;
+ struct irq_domain *msi_domain;
+ struct irq_domain *dev_domain;
+ u32 num_vectors;
+ u64 vector_phy;
+ long unsigned int used[1];
+};
+
+struct plda_pcie_host_ops;
+
+struct plda_pcie_rp {
+ struct device *dev;
+ struct pci_host_bridge *bridge;
+ struct irq_domain *intx_domain;
+ struct irq_domain *event_domain;
+ raw_spinlock_t lock;
+ struct plda_msi msi;
+ const struct plda_event_ops *event_ops;
+ const struct irq_chip *event_irq_chip;
+ const struct plda_pcie_host_ops *host_ops;
+ void *bridge_addr;
+ void *config_base;
+ long unsigned int events_bitmap;
+ int irq;
+ int msi_irq;
+ int intx_irq;
+ int num_events;
+};
+
+struct plda_pcie_host_ops {
+ int (*host_init)(struct plda_pcie_rp *);
+ void (*host_deinit)(struct plda_pcie_rp *);
+};
+
+struct plda_event {
+ int (*request_event_irq)(struct plda_pcie_rp *, int, int);
+ int intx_event;
+ int msi_event;
+};
+
+struct fb_event {
+ struct fb_info *info;
+ void *data;
+};
+
+typedef u32 (*acpi_osd_handler)(void *);
+
+typedef void (*acpi_osd_exec_callback)(void *);
+
+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_os_dpc {
+ acpi_osd_exec_callback function;
+ void *context;
+ struct work_struct work;
+};
+
+struct acpi_ioremap {
+ struct list_head list;
+ void *virt;
+ acpi_physical_address phys;
+ acpi_size size;
+ union {
+ long unsigned int refcount;
+ struct rcu_work rwork;
+ } track;
+};
+
+struct acpi_hp_work {
+ struct work_struct work;
+ struct acpi_device *adev;
+ u32 src;
+};
+
+struct resource_win {
+ struct resource res;
+ resource_size_t offset;
+};
+
+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 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_ged_device {
+ struct device *dev;
+ struct list_head event_list;
+};
+
+struct acpi_ged_event {
+ struct list_head node;
+ struct device *dev;
+ unsigned int gsi;
+ unsigned int irq;
+ acpi_handle handle;
+};
+
+struct acpi_pcc_info {
+ u8 subspace_id;
+ u16 length;
+ u8 *internal_buffer;
+};
+
+struct acpi_ffh_info {
+ u64 offset;
+ u64 length;
+};
+
+struct acpi_reg_walk_info {
+ u32 function;
+ u32 reg_run_count;
+ acpi_adr_space_type space_id;
+};
+
+typedef enum {
+ ACPI_TRACE_AML_METHOD = 0,
+ ACPI_TRACE_AML_OPCODE = 1,
+ ACPI_TRACE_AML_REGION = 2,
+} acpi_trace_event_type;
+
+struct acpi_pci_device {
+ acpi_handle device;
+ struct acpi_pci_device *next;
+};
+
+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;
+};
+
+struct acpi_pkg_info {
+ u8 *free_space;
+ acpi_size length;
+ u32 object_space;
+ u32 num_packages;
+};
+
+struct pnp_info_buffer {
+ char *buffer;
+ char *curr;
+ long unsigned int size;
+ long unsigned int len;
+ int stop;
+ int error;
+};
+
+typedef struct pnp_info_buffer pnp_info_buffer_t;
+
+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 cv1800_clk_regfield {
+ u16 reg;
+ u8 shift;
+ u8 width;
+ s16 initval;
+ long unsigned int flags;
+};
+
+struct cv1800_clk_gate {
+ struct cv1800_clk_common common;
+ struct cv1800_clk_regbit gate;
+};
+
+struct cv1800_clk_div {
+ struct cv1800_clk_common common;
+ struct cv1800_clk_regbit gate;
+ struct cv1800_clk_regfield div;
+};
+
+struct cv1800_clk_bypass_div {
+ struct cv1800_clk_div div;
+ struct cv1800_clk_regbit bypass;
+};
+
+struct cv1800_clk_mux {
+ struct cv1800_clk_common common;
+ struct cv1800_clk_regbit gate;
+ struct cv1800_clk_regfield div;
+ struct cv1800_clk_regfield mux;
+};
+
+struct cv1800_clk_bypass_mux {
+ struct cv1800_clk_mux mux;
+ struct cv1800_clk_regbit bypass;
+};
+
+struct cv1800_clk_mmux {
+ struct cv1800_clk_common common;
+ struct cv1800_clk_regbit gate;
+ struct cv1800_clk_regfield div[2];
+ struct cv1800_clk_regfield mux[2];
+ struct cv1800_clk_regbit bypass;
+ struct cv1800_clk_regbit clk_sel;
+ const s8 *parent2sel;
+ const u8 *sel2parent[2];
+};
+
+struct cv1800_clk_audio {
+ struct cv1800_clk_common common;
+ struct cv1800_clk_regbit src_en;
+ struct cv1800_clk_regbit output_en;
+ struct cv1800_clk_regbit div_en;
+ struct cv1800_clk_regbit div_up;
+ struct cv1800_clk_regfield m;
+ struct cv1800_clk_regfield n;
+ u32 target_rate;
+};
+
+struct cv1800_clk_ctrl;
+
+struct cv1800_clk_desc {
+ struct clk_hw_onecell_data *clks_data;
+ int (*pre_init)(struct device *, void *, struct cv1800_clk_ctrl *, const struct cv1800_clk_desc *);
+};
+
+struct cv1800_clk_ctrl {
+ const struct cv1800_clk_desc *desc;
+ spinlock_t lock;
+};
+
+struct ccu_nkm {
+ u32 enable;
+ u32 lock;
+ struct ccu_mult_internal n;
+ struct ccu_mult_internal k;
+ struct ccu_div_internal___2 m;
+ struct ccu_mux_internal mux;
+ unsigned int fixed_post_div;
+ long unsigned int max_m_n_ratio;
+ long unsigned int min_parent_m_ratio;
+ struct ccu_common common;
+};
+
+struct _ccu_nkm {
+ long unsigned int n;
+ long unsigned int min_n;
+ long unsigned int max_n;
+ long unsigned int k;
+ long unsigned int min_k;
+ long unsigned int max_k;
+ long unsigned int m;
+ long unsigned int min_m;
+ long unsigned int max_m;
+};
+
+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 virtio_balloon_config {
+ __le32 num_pages;
+ __le32 actual;
+ union {
+ __le32 free_page_hint_cmd_id;
+ __le32 free_page_report_cmd_id;
+ };
+ __le32 poison_val;
+};
+
+struct virtio_balloon_stat {
+ __virtio16 tag;
+ __virtio64 val;
+} __attribute__((packed));
+
+struct balloon_dev_info {
+ long unsigned int isolated_pages;
+ spinlock_t pages_lock;
+ struct list_head pages;
+ int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
+};
+
+enum virtio_balloon_vq {
+ VIRTIO_BALLOON_VQ_INFLATE = 0,
+ VIRTIO_BALLOON_VQ_DEFLATE = 1,
+ VIRTIO_BALLOON_VQ_STATS = 2,
+ VIRTIO_BALLOON_VQ_FREE_PAGE = 3,
+ VIRTIO_BALLOON_VQ_REPORTING = 4,
+ VIRTIO_BALLOON_VQ_MAX = 5,
+};
+
+enum virtio_balloon_config_read {
+ VIRTIO_BALLOON_CONFIG_READ_CMD_ID = 0,
+};
+
+struct virtio_balloon {
+ struct virtio_device *vdev;
+ struct virtqueue *inflate_vq;
+ struct virtqueue *deflate_vq;
+ struct virtqueue *stats_vq;
+ struct virtqueue *free_page_vq;
+ struct workqueue_struct *balloon_wq;
+ struct work_struct report_free_page_work;
+ struct work_struct update_balloon_stats_work;
+ struct work_struct update_balloon_size_work;
+ spinlock_t stop_update_lock;
+ bool stop_update;
+ long unsigned int config_read_bitmap;
+ struct list_head free_page_list;
+ spinlock_t free_page_list_lock;
+ long unsigned int num_free_page_blocks;
+ u32 cmd_id_received_cache;
+ __virtio32 cmd_id_active;
+ __virtio32 cmd_id_stop;
+ wait_queue_head_t acked;
+ unsigned int num_pages;
+ struct balloon_dev_info vb_dev_info;
+ struct mutex balloon_lock;
+ unsigned int num_pfns;
+ __virtio32 pfns[256];
+ struct virtio_balloon_stat stats[16];
+ struct shrinker *shrinker;
+ struct notifier_block oom_nb;
+ struct virtqueue *reporting_vq;
+ struct page_reporting_dev_info pr_dev_info;
+ spinlock_t wakeup_lock;
+ bool processing_wakeup_event;
+ u32 wakeup_signal_mask;
+};
+
+struct sun20i_regulator_data {
+ const struct regulator_desc *descs;
+ unsigned int ndescs;
+};
+
+struct unimapdesc {
+ short unsigned int entry_ct;
+ struct unipair *entries;
+};
+
+struct kbentry {
+ unsigned char kb_table;
+ unsigned char kb_index;
+ short unsigned int kb_value;
+};
+
+struct kbsentry {
+ unsigned char kb_func;
+ unsigned char kb_string[512];
+};
+
+struct kbkeycode {
+ unsigned int scancode;
+ unsigned int keycode;
+};
+
+struct kbd_repeat {
+ int delay;
+ int period;
+};
+
+struct console_font_op {
+ unsigned int op;
+ unsigned int flags;
+ unsigned int width;
+ unsigned int height;
+ unsigned int charcount;
+ unsigned char *data;
+};
+
+struct vt_stat {
+ short unsigned int v_active;
+ short unsigned int v_signal;
+ short unsigned int v_state;
+};
+
+struct vt_sizes {
+ short unsigned int v_rows;
+ short unsigned int v_cols;
+ short unsigned int v_scrollsize;
+};
+
+struct vt_consize {
+ short unsigned int v_rows;
+ short unsigned int v_cols;
+ short unsigned int v_vlin;
+ short unsigned int v_clin;
+ short unsigned int v_vcol;
+ short unsigned int v_ccol;
+};
+
+struct vt_event {
+ unsigned int event;
+ unsigned int oldev;
+ unsigned int newev;
+ unsigned int pad[4];
+};
+
+struct vt_setactivate {
+ unsigned int console;
+ struct vt_mode mode;
+};
+
+struct vt_spawn_console {
+ spinlock_t lock;
+ struct pid *pid;
+ int sig;
+};
+
+struct vt_event_wait {
+ struct list_head list;
+ struct vt_event event;
+ int done;
+};
+
+struct compat_console_font_op {
+ compat_uint_t op;
+ compat_uint_t flags;
+ compat_uint_t width;
+ compat_uint_t height;
+ compat_uint_t charcount;
+ compat_caddr_t data;
+};
+
+struct compat_unimapdesc {
+ short unsigned int entry_ct;
+ compat_caddr_t entries;
+};
+
+struct dw8250_platform_data {
+ u8 usr_reg;
+ u32 cpr_value;
+ unsigned int quirks;
+};
+
+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 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 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;
+};
+
+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,
+};
+
+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 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 group_device {
+ struct list_head list;
+ struct device *dev;
+ char *name;
+};
+
+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_SET_DOMAIN_MUST_SUCCEED = 1,
+};
+
+struct group_for_pci_data {
+ struct pci_dev *pdev;
+ struct iommu_group *group;
+};
+
+struct probe {
+ struct probe *next;
+ dev_t dev;
+ long unsigned int range;
+ struct module *owner;
+ kobj_probe_t *get;
+ int (*lock)(dev_t, void *);
+ void *data;
+};
+
+struct kobj_map {
+ struct probe *probes[255];
+ struct mutex *lock;
+};
+
+struct virtio_blk_geometry {
+ __virtio16 cylinders;
+ __u8 heads;
+ __u8 sectors;
+};
+
+struct virtio_blk_zoned_characteristics {
+ __virtio32 zone_sectors;
+ __virtio32 max_open_zones;
+ __virtio32 max_active_zones;
+ __virtio32 max_append_sectors;
+ __virtio32 write_granularity;
+ __u8 model;
+ __u8 unused2[3];
+};
+
+struct virtio_blk_config {
+ __virtio64 capacity;
+ __virtio32 size_max;
+ __virtio32 seg_max;
+ struct virtio_blk_geometry geometry;
+ __virtio32 blk_size;
+ __u8 physical_block_exp;
+ __u8 alignment_offset;
+ __virtio16 min_io_size;
+ __virtio32 opt_io_size;
+ __u8 wce;
+ __u8 unused;
+ __virtio16 num_queues;
+ __virtio32 max_discard_sectors;
+ __virtio32 max_discard_seg;
+ __virtio32 discard_sector_alignment;
+ __virtio32 max_write_zeroes_sectors;
+ __virtio32 max_write_zeroes_seg;
+ __u8 write_zeroes_may_unmap;
+ __u8 unused1[3];
+ __virtio32 max_secure_erase_sectors;
+ __virtio32 max_secure_erase_seg;
+ __virtio32 secure_erase_sector_alignment;
+ struct virtio_blk_zoned_characteristics zoned;
+};
+
+struct virtio_blk_outhdr {
+ __virtio32 type;
+ __virtio32 ioprio;
+ __virtio64 sector;
+};
+
+struct virtio_blk_discard_write_zeroes {
+ __le64 sector;
+ __le32 num_sectors;
+ __le32 flags;
+};
+
+struct virtio_blk_vq {
+ struct virtqueue *vq;
+ spinlock_t lock;
+ char name[16];
+ long: 64;
+ long: 64;
+};
+
+struct virtio_blk {
+ struct mutex vdev_mutex;
+ struct virtio_device *vdev;
+ struct gendisk *disk;
+ struct blk_mq_tag_set tag_set;
+ struct work_struct config_work;
+ int index;
+ int num_vqs;
+ int io_queues[3];
+ struct virtio_blk_vq *vqs;
+ unsigned int zone_sectors;
+};
+
+struct virtblk_req {
+ struct virtio_blk_outhdr out_hdr;
+ union {
+ u8 status;
+ struct {
+ __virtio64 sector;
+ u8 status;
+ } zone_append;
+ } in_hdr;
+ size_t in_hdr_len;
+ struct sg_table sg_table;
+ struct scatterlist sg[0];
+};
+
+struct nd_cmd_get_config_data_hdr {
+ __u32 in_offset;
+ __u32 in_length;
+ __u32 status;
+ __u8 out_buf[0];
+};
+
+enum nvdimm_security_bits {
+ NVDIMM_SECURITY_DISABLED = 0,
+ NVDIMM_SECURITY_UNLOCKED = 1,
+ NVDIMM_SECURITY_LOCKED = 2,
+ NVDIMM_SECURITY_FROZEN = 3,
+ NVDIMM_SECURITY_OVERWRITE = 4,
+};
+
+enum btt_init_state {
+ INIT_UNCHECKED = 0,
+ INIT_NOTFOUND = 1,
+ INIT_READY = 2,
+};
+
+struct log_entry {
+ __le32 lba;
+ __le32 old_map;
+ __le32 new_map;
+ __le32 seq;
+};
+
+struct log_group {
+ struct log_entry ent[4];
+};
+
+struct free_entry {
+ u32 block;
+ u8 sub;
+ u8 seq;
+ u8 has_err;
+};
+
+struct aligned_lock {
+ union {
+ spinlock_t lock;
+ u8 cacheline_padding[64];
+ };
+};
+
+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];
+};
+
+enum log_ent_request {
+ LOG_NEW_ENT = 0,
+ LOG_OLD_ENT = 1,
+};
+
+typedef bool busy_tag_iter_fn(struct request *, void *);
+
+struct scsi_host_busy_iter_data {
+ bool (*fn)(struct scsi_cmnd *, void *);
+ void *priv;
+};
+
+struct trace_seq {
+ char buffer[8156];
+ struct seq_buf seq;
+ size_t readpos;
+ int full;
+};
+
+enum bip_flags {
+ BIP_BLOCK_INTEGRITY = 1,
+ BIP_MAPPED_INTEGRITY = 2,
+ BIP_CTRL_NOCHECK = 4,
+ BIP_DISK_NOCHECK = 8,
+ BIP_IP_CHECKSUM = 16,
+ BIP_COPY_USER = 32,
+};
+
+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 {
+ BLK_MQ_REQ_NOWAIT = 1,
+ BLK_MQ_REQ_RESERVED = 2,
+ BLK_MQ_REQ_PM = 4,
+};
+
+enum t10_dif_type {
+ T10_PI_TYPE0_PROTECTION = 0,
+ T10_PI_TYPE1_PROTECTION = 1,
+ T10_PI_TYPE2_PROTECTION = 2,
+ T10_PI_TYPE3_PROTECTION = 3,
+};
+
+struct scsi_io_group_descriptor {
+ u8 ic_enable: 1;
+ u8 cs_enble: 1;
+ u8 st_enble: 1;
+ u8 reserved1: 3;
+ u8 io_advice_hints_mode: 2;
+ u8 reserved2[3];
+ u8 lbm_descriptor_type: 4;
+ u8 rlbsr: 2;
+ u8 reserved3: 1;
+ u8 acdlu: 1;
+ u8 params[2];
+ u8 reserved4;
+ u8 reserved5[8];
+};
+
+struct scsi_stream_status {
+ u8 reserved1: 7;
+ u8 perm: 1;
+ u8 reserved2;
+ __be16 stream_identifier;
+ u8 rel_lifetime: 6;
+ u8 reserved3: 2;
+ u8 reserved4[3];
+};
+
+struct scsi_stream_status_header {
+ __be32 len;
+ u16 reserved;
+ __be16 number_of_open_streams;
+ struct {
+ struct {} __empty_stream_status;
+ struct scsi_stream_status stream_status[0];
+ };
+};
+
+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,
+};
+
+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 {
+ SD_ZERO_WRITE = 0,
+ SD_ZERO_WS = 1,
+ SD_ZERO_WS16_UNMAP = 2,
+ SD_ZERO_WS10_UNMAP = 3,
+};
+
+struct opal_dev;
+
+struct scsi_disk {
+ struct scsi_device *device;
+ struct device disk_dev;
+ struct gendisk *disk;
+ struct opal_dev *opal_dev;
+ 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 max_atomic;
+ u32 atomic_alignment;
+ u32 atomic_granularity;
+ u32 max_atomic_with_boundary;
+ u32 max_atomic_boundary;
+ u32 index;
+ unsigned int physical_block_size;
+ unsigned int max_medium_access_timeouts;
+ unsigned int medium_access_timed_out;
+ u16 permanent_stream_count;
+ 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;
+ unsigned int rscs: 1;
+ unsigned int use_atomic_write_boundary: 1;
+};
+
+enum {
+ BLK_TAG_ALLOC_FIFO = 0,
+ BLK_TAG_ALLOC_RR = 1,
+ BLK_TAG_ALLOC_MAX = 2,
+};
+
+struct ahci_cmd_hdr {
+ __le32 opts;
+ __le32 status;
+ __le32 tbl_addr;
+ __le32 tbl_addr_hi;
+ __le32 reserved[4];
+};
+
+struct ahci_em_priv {
+ enum sw_activity blink_policy;
+ struct timer_list timer;
+ long unsigned int saved_activity;
+ long unsigned int activity;
+ long unsigned int led_state;
+ struct ata_link *link;
+};
+
+struct ahci_port_priv {
+ struct ata_link *active_link;
+ struct ahci_cmd_hdr *cmd_slot;
+ dma_addr_t cmd_slot_dma;
+ void *cmd_tbl;
+ dma_addr_t cmd_tbl_dma;
+ void *rx_fis;
+ dma_addr_t rx_fis_dma;
+ unsigned int ncq_saw_d2h: 1;
+ unsigned int ncq_saw_dmas: 1;
+ unsigned int ncq_saw_sdb: 1;
+ spinlock_t lock;
+ u32 intr_mask;
+ bool fbs_supported;
+ bool fbs_enabled;
+ int fbs_last_dev;
+ struct ahci_em_priv em_priv[15];
+ char *irq_desc;
+};
+
+enum {
+ AHCI_PCI_BAR_STA2X11 = 0,
+ AHCI_PCI_BAR_CAVIUM = 0,
+ AHCI_PCI_BAR_LOONGSON = 0,
+ AHCI_PCI_BAR_ENMOTUS = 2,
+ AHCI_PCI_BAR_CAVIUM_GEN5 = 4,
+ AHCI_PCI_BAR_STANDARD = 5,
+};
+
+enum board_ids {
+ board_ahci = 0,
+ board_ahci_43bit_dma = 1,
+ board_ahci_ign_iferr = 2,
+ board_ahci_no_debounce_delay = 3,
+ board_ahci_no_msi = 4,
+ board_ahci_pcs_quirk = 5,
+ board_ahci_pcs_quirk_no_devslp = 6,
+ board_ahci_pcs_quirk_no_sntf = 7,
+ board_ahci_yes_fbs = 8,
+ board_ahci_al = 9,
+ board_ahci_avn = 10,
+ board_ahci_mcp65 = 11,
+ board_ahci_mcp77 = 12,
+ board_ahci_mcp89 = 13,
+ board_ahci_mv = 14,
+ board_ahci_sb600 = 15,
+ board_ahci_sb700 = 16,
+ board_ahci_vt8251 = 17,
+ board_ahci_mcp_linux = 11,
+ board_ahci_mcp67 = 11,
+ board_ahci_mcp73 = 11,
+ board_ahci_mcp79 = 12,
+};
+
+typedef long unsigned int u_long;
+
+struct blkpg_compat_ioctl_arg {
+ compat_int_t op;
+ compat_int_t flags;
+ compat_int_t datalen;
+ compat_uptr_t data;
+};
+
+struct erase_info_user {
+ __u32 start;
+ __u32 length;
+};
+
+struct erase_info_user64 {
+ __u64 start;
+ __u64 length;
+};
+
+struct mtd_oob_buf {
+ __u32 start;
+ __u32 length;
+ unsigned char *ptr;
+};
+
+struct mtd_oob_buf64 {
+ __u64 start;
+ __u32 pad;
+ __u32 length;
+ __u64 usr_ptr;
+};
+
+struct mtd_write_req {
+ __u64 start;
+ __u64 len;
+ __u64 ooblen;
+ __u64 usr_data;
+ __u64 usr_oob;
+ __u8 mode;
+ __u8 padding[7];
+};
+
+struct mtd_read_req_ecc_stats {
+ __u32 uncorrectable_errors;
+ __u32 corrected_bitflips;
+ __u32 max_bitflips;
+};
+
+struct mtd_read_req {
+ __u64 start;
+ __u64 len;
+ __u64 ooblen;
+ __u64 usr_data;
+ __u64 usr_oob;
+ __u8 mode;
+ __u8 padding[7];
+ struct mtd_read_req_ecc_stats ecc_stats;
+};
+
+struct mtd_info_user {
+ __u8 type;
+ __u32 flags;
+ __u32 size;
+ __u32 erasesize;
+ __u32 writesize;
+ __u32 oobsize;
+ __u64 padding;
+};
+
+struct region_info_user {
+ __u32 offset;
+ __u32 erasesize;
+ __u32 numblocks;
+ __u32 regionindex;
+};
+
+struct nand_oobinfo {
+ __u32 useecc;
+ __u32 eccbytes;
+ __u32 oobfree[16];
+ __u32 eccpos[32];
+};
+
+struct nand_oobfree {
+ __u32 offset;
+ __u32 length;
+};
+
+struct nand_ecclayout_user {
+ __u32 eccbytes;
+ __u32 eccpos[64];
+ __u32 oobavail;
+ struct nand_oobfree oobfree[8];
+};
+
+enum mtd_file_modes {
+ MTD_FILE_MODE_NORMAL = 0,
+ MTD_FILE_MODE_OTP_FACTORY = 1,
+ MTD_FILE_MODE_OTP_USER = 2,
+ MTD_FILE_MODE_RAW = 3,
+};
+
+struct mtd_file_info {
+ struct mtd_info *mtd;
+ enum mtd_file_modes mode;
+};
+
+struct mtd_oob_buf32 {
+ u_int32_t start;
+ u_int32_t length;
+ compat_caddr_t ptr;
+};
+
+struct sfdp_header {
+ u32 signature;
+ u8 minor;
+ u8 major;
+ u8 nph;
+ u8 unused;
+ struct sfdp_parameter_header bfpt_header;
+};
+
+struct sfdp_bfpt_read {
+ u32 hwcaps;
+ u32 supported_dword;
+ u32 supported_bit;
+ u32 settings_dword;
+ u32 settings_shift;
+ enum spi_nor_protocol proto;
+};
+
+struct sfdp_bfpt_erase {
+ u32 dword;
+ u32 shift;
+};
+
+struct sfdp_4bait {
+ u32 hwcaps;
+ u32 supported_bit;
+};
+
+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 e1000_host_mng_command_header {
+ u8 command_id;
+ u8 checksum;
+ u16 reserved1;
+ u16 reserved2;
+ u16 command_length;
+};
+
+enum e1000_mng_mode {
+ e1000_mng_mode_none = 0,
+ e1000_mng_mode_asf = 1,
+ e1000_mng_mode_pt = 2,
+ e1000_mng_mode_ipmi = 3,
+ e1000_mng_mode_host_if_only = 4,
+};
+
+struct find_interface_arg {
+ int minor;
+ struct device_driver *drv;
+};
+
+struct each_dev_arg {
+ void *data;
+ int (*fn)(struct usb_device *, void *);
+};
+
+struct usb_dynid {
+ struct list_head node;
+ struct usb_device_id id;
+};
+
+struct class_info {
+ int class;
+ char *class_name;
+};
+
+typedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);
+
+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;
+};
+
+struct xhci_regset {
+ char name[32];
+ struct debugfs_regset32 regset;
+ size_t nregs;
+ struct list_head list;
+};
+
+struct xhci_file_map {
+ const char *name;
+ int (*show)(struct seq_file *, void *);
+};
+
+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 input_event {
+ __kernel_ulong_t __sec;
+ __kernel_ulong_t __usec;
+ __u16 type;
+ __u16 code;
+ __s32 value;
+};
+
+struct input_event_compat {
+ compat_ulong_t sec;
+ compat_ulong_t usec;
+ __u16 type;
+ __u16 code;
+ __s32 value;
+};
+
+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 vivaldi_data {
+ u32 function_row_physmap[24];
+ unsigned int num_function_row_keys;
+};
+
+struct trackpoint_data {
+ u8 variant_id;
+ u8 firmware_id;
+ u8 sensitivity;
+ u8 speed;
+ u8 inertia;
+ u8 reach;
+ u8 draghys;
+ u8 mindrag;
+ u8 thresh;
+ u8 upthresh;
+ u8 ztime;
+ u8 jenks;
+ u8 drift_time;
+ bool press_to_select;
+ bool skipback;
+ bool ext_dev;
+};
+
+struct trackpoint_attr_data {
+ size_t field_offset;
+ u8 command;
+ u8 mask;
+ bool inverted;
+ u8 power_on_default;
+};
+
+struct goldfish_rtc {
+ void *base;
+ int irq;
+ struct rtc_device *rtc;
+};
+
+struct i2c_dw_semaphore_callbacks {
+ int (*probe)(struct dw_i2c_dev *);
+ void (*remove)(struct dw_i2c_dev *);
+};
+
+struct sd_app_op_cond_busy_data {
+ struct mmc_host *host;
+ u32 ocr;
+ struct mmc_command *cmd;
+};
+
+struct mmc_gpio {
+ struct gpio_desc *ro_gpio;
+ struct gpio_desc *cd_gpio;
+ irq_handler_t cd_gpio_isr;
+ char *ro_label;
+ char *cd_label;
+ u32 cd_debounce_delay_ms;
+ int cd_irq;
+};
+
+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_pwrseq_simple {
+ struct mmc_pwrseq pwrseq;
+ bool clk_enabled;
+ u32 post_power_on_delay_ms;
+ u32 power_off_delay_us;
+ struct clk *ext_clk;
+ struct gpio_descs *reset_gpios;
+};
+
+struct sunxi_mmc_clk_delay {
+ u32 output;
+ u32 sample;
+};
+
+struct sunxi_idma_des {
+ __le32 config;
+ __le32 buf_size;
+ __le32 buf_addr_ptr1;
+ __le32 buf_addr_ptr2;
+};
+
+struct sunxi_mmc_cfg {
+ u32 idma_des_size_bits;
+ u32 idma_des_shift;
+ const struct sunxi_mmc_clk_delay *clk_delays;
+ bool can_calibrate;
+ bool mask_data0;
+ bool needs_new_timings;
+ bool ccu_has_timings_switch;
+};
+
+struct sunxi_mmc_host {
+ struct device *dev;
+ struct mmc_host *mmc;
+ struct reset_control *reset;
+ const struct sunxi_mmc_cfg *cfg;
+ void *reg_base;
+ struct clk *clk_ahb;
+ struct clk *clk_mmc;
+ struct clk *clk_sample;
+ struct clk *clk_output;
+ spinlock_t lock;
+ int irq;
+ u32 int_sum;
+ u32 sdio_imask;
+ dma_addr_t sg_dma;
+ void *sg_cpu;
+ bool wait_dma;
+ struct mmc_request *mrq;
+ struct mmc_request *manual_stop_mrq;
+ int ferror;
+ bool vqmmc_enabled;
+ bool use_new_timings;
+};
+
+struct efi_memory_map_data {
+ phys_addr_t phys_map;
+ long unsigned int size;
+ long unsigned int desc_version;
+ long unsigned int desc_size;
+ long unsigned int flags;
+};
+
+struct virtio_crypto_config {
+ __le32 status;
+ __le32 max_dataqueues;
+ __le32 crypto_services;
+ __le32 cipher_algo_l;
+ __le32 cipher_algo_h;
+ __le32 hash_algo;
+ __le32 mac_algo_l;
+ __le32 mac_algo_h;
+ __le32 aead_algo;
+ __le32 max_cipher_key_len;
+ __le32 max_auth_key_len;
+ __le32 akcipher_algo;
+ __le64 max_size;
+};
+
+struct alias_prop {
+ struct list_head link;
+ const char *alias;
+ struct device_node *np;
+ int id;
+ char stem[0];
+};
+
+typedef __u16 __rpmsg16;
+
+struct virtproc_info {
+ struct virtio_device *vdev;
+ struct virtqueue *rvq;
+ struct virtqueue *svq;
+ void *rbufs;
+ void *sbufs;
+ unsigned int num_bufs;
+ unsigned int buf_size;
+ int last_sbuf;
+ dma_addr_t bufs_dma;
+ struct mutex tx_lock;
+ struct idr endpoints;
+ struct mutex endpoints_lock;
+ wait_queue_head_t sendq;
+ atomic_t sleepers;
+};
+
+struct rpmsg_hdr {
+ __rpmsg32 src;
+ __rpmsg32 dst;
+ __rpmsg32 reserved;
+ __rpmsg16 len;
+ __rpmsg16 flags;
+ u8 data[0];
+};
+
+struct virtio_rpmsg_channel {
+ struct rpmsg_device rpdev;
+ struct virtproc_info *vrp;
+};
+
+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,
+};
+
+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 cpu_hw_events {
+ int n_events;
+ int irq;
+ struct perf_event *events[64];
+ long unsigned int used_hw_ctrs[1];
+ long unsigned int used_fw_ctrs[1];
+ void *snapshot_addr;
+ phys_addr_t snapshot_addr_phys;
+ bool snapshot_set_done;
+ u64 snapshot_cval_shcopy[64];
+};
+
+struct riscv_pmu {
+ struct pmu pmu;
+ char *name;
+ irqreturn_t (*handle_irq)(int, void *);
+ long unsigned int cmask;
+ u64 (*ctr_read)(struct perf_event *);
+ int (*ctr_get_idx)(struct perf_event *);
+ int (*ctr_get_width)(int);
+ void (*ctr_clear_idx)(struct perf_event *);
+ void (*ctr_start)(struct perf_event *, u64);
+ void (*ctr_stop)(struct perf_event *, long unsigned int);
+ int (*event_map)(struct perf_event *, u64 *);
+ void (*event_init)(struct perf_event *);
+ void (*event_mapped)(struct perf_event *, struct mm_struct *);
+ void (*event_unmapped)(struct perf_event *, struct mm_struct *);
+ uint8_t (*csr_index)(struct perf_event *);
+ struct cpu_hw_events *hw_events;
+ struct hlist_node node;
+ struct notifier_block riscv_pm_nb;
+};
+
+struct clock_read_data {
+ u64 epoch_ns;
+ u64 epoch_cyc;
+ u64 sched_clock_mask;
+ u64 (*read_sched_clock)();
+ u32 mult;
+ u32 shift;
+};
+
+struct snd_monitor_file {
+ struct file *file;
+ const struct file_operations *disconnected_f_op;
+ struct list_head shutdown_list;
+ struct list_head list;
+};
+
+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;
+ unsigned char pad1[16];
+ unsigned char reserved[64];
+};
+
+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];
+};
+
+typedef int (*snd_kctl_ioctl_func_t)(struct snd_card *, struct snd_ctl_file *, unsigned int, long unsigned int);
+
+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;
+};
+
+struct dmaengine_pcm_runtime_data {
+ struct dma_chan *dma_chan;
+ dma_cookie_t cookie;
+ unsigned int pos;
+};
+
+struct dmaengine_pcm {
+ struct dma_chan *chan[2];
+ const struct snd_dmaengine_pcm_config *config;
+ struct snd_soc_component component;
+ unsigned int flags;
+};
+
+struct scm_timestamping_internal {
+ struct timespec64 ts[3];
+};
+
+struct scm_timestamping {
+ struct __kernel_old_timespec ts[3];
+};
+
+struct scm_timestamping64 {
+ struct __kernel_timespec ts[3];
+};
+
+enum {
+ IF_LINK_MODE_DEFAULT = 0,
+ IF_LINK_MODE_DORMANT = 1,
+ IF_LINK_MODE_TESTING = 2,
+};
+
+enum lw_bits {
+ LW_URGENT = 0,
+};
+
+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_enc_opts {
+ u8 data[255];
+ u8 len;
+ u32 dst_opt_type;
+};
+
+struct flow_dissector_key_arp {
+ __u32 sip;
+ __u32 tip;
+ __u8 op;
+ unsigned char sha[6];
+ unsigned char tha[6];
+};
+
+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_dissector_key_tcp {
+ __be16 flags;
+};
+
+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 flow_dissector_key_pppoe {
+ __be16 session_id;
+ __be16 ppp_proto;
+ __be16 type;
+};
+
+struct flow_dissector_key_l2tpv3 {
+ __be32 session_id;
+};
+
+struct flow_dissector_key_ipsec {
+ __be32 spi;
+};
+
+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_match_ports_range {
+ struct flow_dissector_key_ports_range *key;
+ struct flow_dissector_key_ports_range *mask;
+};
+
+struct flow_match_icmp {
+ struct flow_dissector_key_icmp *key;
+ struct flow_dissector_key_icmp *mask;
+};
+
+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_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 flow_stats {
+ u64 pkts;
+ u64 bytes;
+ u64 drops;
+ u64 lastused;
+ enum flow_action_hw_stats used_hw_stats;
+ bool used_hw_stats_valid;
+};
+
+enum flow_block_command {
+ FLOW_BLOCK_BIND = 0,
+ FLOW_BLOCK_UNBIND = 1,
+};
+
+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,
+};
+
+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_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;
+};
+
+enum offload_act_command {
+ FLOW_ACT_REPLACE = 0,
+ FLOW_ACT_DESTROY = 1,
+ FLOW_ACT_STATS = 2,
+};
+
+struct flow_offload_action {
+ struct netlink_ext_ack *extack;
+ enum offload_act_command command;
+ enum flow_action_id id;
+ u32 index;
+ long unsigned int cookie;
+ struct flow_stats stats;
+ struct flow_action action;
+};
+
+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;
+};
+
+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;
+ };
+};
+
+enum tc_link_layer {
+ TC_LINKLAYER_UNAWARE = 0,
+ TC_LINKLAYER_ETHERNET = 1,
+ TC_LINKLAYER_ATM = 2,
+};
+
+struct tc_ratespec {
+ unsigned char cell_log;
+ __u8 linklayer;
+ short unsigned int overhead;
+ short int cell_align;
+ short unsigned int mpu;
+ __u32 rate;
+};
+
+enum {
+ TCA_STAB_UNSPEC = 0,
+ TCA_STAB_BASE = 1,
+ TCA_STAB_DATA = 2,
+ __TCA_STAB_MAX = 3,
+};
+
+struct qdisc_rate_table {
+ struct tc_ratespec rate;
+ u32 data[256];
+ struct qdisc_rate_table *next;
+ int refcnt;
+};
+
+struct Qdisc_class_common {
+ u32 classid;
+ unsigned int filter_cnt;
+ struct hlist_node hnode;
+};
+
+struct Qdisc_class_hash {
+ struct hlist_head *hash;
+ unsigned int hashsize;
+ unsigned int hashmask;
+ unsigned int hashelems;
+};
+
+struct qdisc_watchdog {
+ struct hrtimer timer;
+ struct Qdisc *qdisc;
+};
+
+struct tc_query_caps_base {
+ enum tc_setup_type type;
+ void *caps;
+};
+
+enum tc_root_command {
+ TC_ROOT_GRAFT = 0,
+};
+
+struct tc_root_qopt_offload {
+ enum tc_root_command command;
+ u32 handle;
+ bool ingress;
+};
+
+struct check_loop_arg {
+ struct qdisc_walker w;
+ struct Qdisc *p;
+ int depth;
+};
+
+struct tcf_bind_args {
+ struct tcf_walker w;
+ long unsigned int base;
+ long unsigned int cl;
+ u32 classid;
+};
+
+struct tc_bind_class_args {
+ struct qdisc_walker w;
+ long unsigned int new_cl;
+ u32 portid;
+ u32 clid;
+};
+
+struct qdisc_dump_args {
+ struct qdisc_walker w;
+ struct sk_buff *skb;
+ struct netlink_callback *cb;
+};
+
+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,
+ NL_ATTR_TYPE_SINT = 16,
+ NL_ATTR_TYPE_UINT = 17,
+};
+
+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];
+};
+
+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_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;
+};
+
+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_c33_pse_ext_state {
+ ETHTOOL_C33_PSE_EXT_STATE_ERROR_CONDITION = 1,
+ ETHTOOL_C33_PSE_EXT_STATE_MR_MPS_VALID = 2,
+ ETHTOOL_C33_PSE_EXT_STATE_MR_PSE_ENABLE = 3,
+ ETHTOOL_C33_PSE_EXT_STATE_OPTION_DETECT_TED = 4,
+ ETHTOOL_C33_PSE_EXT_STATE_OPTION_VPORT_LIM = 5,
+ ETHTOOL_C33_PSE_EXT_STATE_OVLD_DETECTED = 6,
+ ETHTOOL_C33_PSE_EXT_STATE_PD_DLL_POWER_TYPE = 7,
+ ETHTOOL_C33_PSE_EXT_STATE_POWER_NOT_AVAILABLE = 8,
+ ETHTOOL_C33_PSE_EXT_STATE_SHORT_DETECTED = 9,
+};
+
+enum ethtool_c33_pse_ext_substate_error_condition {
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_ERROR_CONDITION_NON_EXISTING_PORT = 1,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_ERROR_CONDITION_UNDEFINED_PORT = 2,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_ERROR_CONDITION_INTERNAL_HW_FAULT = 3,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_ERROR_CONDITION_COMM_ERROR_AFTER_FORCE_ON = 4,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_ERROR_CONDITION_UNKNOWN_PORT_STATUS = 5,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_ERROR_CONDITION_HOST_CRASH_TURN_OFF = 6,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_ERROR_CONDITION_HOST_CRASH_FORCE_SHUTDOWN = 7,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_ERROR_CONDITION_CONFIG_CHANGE = 8,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_ERROR_CONDITION_DETECTED_OVER_TEMP = 9,
+};
+
+enum ethtool_c33_pse_ext_substate_mr_pse_enable {
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_MR_PSE_ENABLE_DISABLE_PIN_ACTIVE = 1,
+};
+
+enum ethtool_c33_pse_ext_substate_option_detect_ted {
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_OPTION_DETECT_TED_DET_IN_PROCESS = 1,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_OPTION_DETECT_TED_CONNECTION_CHECK_ERROR = 2,
+};
+
+enum ethtool_c33_pse_ext_substate_option_vport_lim {
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_OPTION_VPORT_LIM_HIGH_VOLTAGE = 1,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_OPTION_VPORT_LIM_LOW_VOLTAGE = 2,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_OPTION_VPORT_LIM_VOLTAGE_INJECTION = 3,
+};
+
+enum ethtool_c33_pse_ext_substate_ovld_detected {
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_OVLD_DETECTED_OVERLOAD = 1,
+};
+
+enum ethtool_c33_pse_ext_substate_power_not_available {
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_POWER_NOT_AVAILABLE_BUDGET_EXCEEDED = 1,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_POWER_NOT_AVAILABLE_PORT_PW_LIMIT_EXCEEDS_CONTROLLER_BUDGET = 2,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_POWER_NOT_AVAILABLE_PD_REQUEST_EXCEEDS_PORT_LIMIT = 3,
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_POWER_NOT_AVAILABLE_HW_PW_LIMIT = 4,
+};
+
+enum ethtool_c33_pse_ext_substate_short_detected {
+ ETHTOOL_C33_PSE_EXT_SUBSTATE_SHORT_DETECTED_SHORT_CONDITION = 1,
+};
+
+enum ethtool_c33_pse_admin_state {
+ ETHTOOL_C33_PSE_ADMIN_STATE_UNKNOWN = 1,
+ ETHTOOL_C33_PSE_ADMIN_STATE_DISABLED = 2,
+ ETHTOOL_C33_PSE_ADMIN_STATE_ENABLED = 3,
+};
+
+enum ethtool_c33_pse_pw_d_status {
+ ETHTOOL_C33_PSE_PW_D_STATUS_UNKNOWN = 1,
+ ETHTOOL_C33_PSE_PW_D_STATUS_DISABLED = 2,
+ ETHTOOL_C33_PSE_PW_D_STATUS_SEARCHING = 3,
+ ETHTOOL_C33_PSE_PW_D_STATUS_DELIVERING = 4,
+ ETHTOOL_C33_PSE_PW_D_STATUS_TEST = 5,
+ ETHTOOL_C33_PSE_PW_D_STATUS_FAULT = 6,
+ ETHTOOL_C33_PSE_PW_D_STATUS_OTHERFAULT = 7,
+};
+
+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,
+};
+
+struct ethtool_c33_pse_ext_state_info {
+ enum ethtool_c33_pse_ext_state c33_pse_ext_state;
+ union {
+ enum ethtool_c33_pse_ext_substate_error_condition error_condition;
+ enum ethtool_c33_pse_ext_substate_mr_pse_enable mr_pse_enable;
+ enum ethtool_c33_pse_ext_substate_option_detect_ted option_detect_ted;
+ enum ethtool_c33_pse_ext_substate_option_vport_lim option_vport_lim;
+ enum ethtool_c33_pse_ext_substate_ovld_detected ovld_detected;
+ enum ethtool_c33_pse_ext_substate_power_not_available power_not_available;
+ enum ethtool_c33_pse_ext_substate_short_detected short_detected;
+ u32 __c33_pse_ext_substate;
+ };
+};
+
+struct ethtool_c33_pse_pw_limit_range {
+ u32 min;
+ u32 max;
+};
+
+struct pse_control_config {
+ enum ethtool_podl_pse_admin_state podl_admin_control;
+ enum ethtool_c33_pse_admin_state c33_admin_control;
+};
+
+struct pse_control_status {
+ enum ethtool_podl_pse_admin_state podl_admin_state;
+ enum ethtool_podl_pse_pw_d_status podl_pw_status;
+ enum ethtool_c33_pse_admin_state c33_admin_state;
+ enum ethtool_c33_pse_pw_d_status c33_pw_status;
+ u32 c33_pw_class;
+ u32 c33_actual_pw;
+ struct ethtool_c33_pse_ext_state_info c33_ext_state_info;
+ u32 c33_avail_pw_limit;
+ struct ethtool_c33_pse_pw_limit_range *c33_pw_limit_ranges;
+ u32 c33_pw_limit_nb_ranges;
+};
+
+enum {
+ ETHTOOL_A_C33_PSE_PW_LIMIT_UNSPEC = 0,
+ ETHTOOL_A_C33_PSE_PW_LIMIT_MIN = 1,
+ ETHTOOL_A_C33_PSE_PW_LIMIT_MAX = 2,
+};
+
+struct pse_reply_data {
+ struct ethnl_reply_data base;
+ struct pse_control_status status;
+};
+
+struct mmpin {
+ struct user_struct *user;
+ unsigned int num_pg;
+};
+
+struct ubuf_info_msgzc {
+ struct ubuf_info ubuf;
+ union {
+ struct {
+ long unsigned int desc;
+ void *ctx;
+ };
+ struct {
+ u32 id;
+ u16 len;
+ u16 zerocopy: 1;
+ u32 bytelen;
+ };
+ };
+ struct mmpin mmp;
+};
+
+enum {
+ LWTUNNEL_XMIT_DONE = 0,
+ LWTUNNEL_XMIT_CONTINUE = 256,
+};
+
+struct ip_fraglist_iter {
+ struct sk_buff *frag;
+ struct iphdr *iph;
+ int offset;
+ unsigned int hlen;
+};
+
+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_reply_arg {
+ struct kvec iov[1];
+ int flags;
+ __wsum csum;
+ int csumoffset;
+ int bound_dev_if;
+ u8 tos;
+ kuid_t uid;
+};
+
+enum l2tp_debug_flags {
+ L2TP_MSG_DEBUG = 1,
+ L2TP_MSG_CONTROL = 2,
+ L2TP_MSG_SEQ = 4,
+ L2TP_MSG_DATA = 8,
+};
+
+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_fastopen_metrics {
+ u16 mss;
+ u16 syn_loss: 10;
+ u16 try_exp: 2;
+ long unsigned int last_syn_loss;
+ struct tcp_fastopen_cookie cookie;
+};
+
+struct tcp_metrics_block {
+ struct tcp_metrics_block *tcpm_next;
+ struct net *tcpm_net;
+ struct inetpeer_addr tcpm_saddr;
+ struct inetpeer_addr tcpm_daddr;
+ long unsigned int tcpm_stamp;
+ u32 tcpm_lock;
+ u32 tcpm_vals[5];
+ struct tcp_fastopen_metrics tcpm_fastopen;
+ struct callback_head callback_head;
+};
+
+struct tcpm_hash_bucket {
+ struct tcp_metrics_block *chain;
+};
+
+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;
+};
+
+enum {
+ IFLA_INET_UNSPEC = 0,
+ IFLA_INET_CONF = 1,
+ __IFLA_INET_MAX = 2,
+};
+
+struct in_validator_info {
+ __be32 ivi_addr;
+ struct in_device *ivi_dev;
+ struct netlink_ext_ack *extack;
+};
+
+struct inet_fill_args {
+ u32 portid;
+ u32 seq;
+ int event;
+ unsigned int flags;
+ int netnsid;
+ int ifindex;
+};
+
+struct devinet_sysctl_table {
+ struct ctl_table_header *sysctl_header;
+ struct ctl_table devinet_vars[33];
+};
+
+struct fib_notifier_info {
+ int family;
+ struct netlink_ext_ack *extack;
+};
+
+struct xfrm_kmaddress {
+ xfrm_address_t local;
+ xfrm_address_t remote;
+ u32 reserved;
+ u16 family;
+};
+
+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_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 xfrmk_sadinfo {
+ u32 sadhcnt;
+ u32 sadhmcnt;
+ u32 sadcnt;
+};
+
+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 frag_hdr {
+ __u8 nexthdr;
+ __u8 reserved;
+ __be16 frag_off;
+ __be32 identification;
+};
+
+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 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 mld_msg {
+ struct icmp6hdr mld_hdr;
+ struct in6_addr mld_mca;
+};
+
+enum {
+ SVC_HANDSHAKE_TO = 1250,
+};
+
+struct rpc_filelist {
+ const char *name;
+ const struct file_operations *i_fop;
+ umode_t mode;
+};
+
+enum {
+ RPCAUTH_info = 0,
+ RPCAUTH_EOF = 1,
+};
+
+enum {
+ RPCAUTH_lockd = 0,
+ RPCAUTH_mount = 1,
+ RPCAUTH_nfs = 2,
+ RPCAUTH_portmap = 3,
+ RPCAUTH_statd = 4,
+ RPCAUTH_nfsd4_cb = 5,
+ RPCAUTH_cache = 6,
+ RPCAUTH_nfsd = 7,
+ RPCAUTH_gssd = 8,
+ RPCAUTH_RootEOF = 9,
+};
+
+struct gssx_name_attr {
+ gssx_buffer attr;
+ gssx_buffer value;
+ struct gssx_option_array extensions;
+};
+
+struct gssx_name_attr_array {
+ u32 count;
+ struct gssx_name_attr *data;
+};
+
+enum dns_payload_content_type {
+ DNS_PAYLOAD_IS_SERVER_LIST = 0,
+};
+
+enum dns_lookup_status {
+ DNS_LOOKUP_NOT_DONE = 0,
+ DNS_LOOKUP_GOOD = 1,
+ DNS_LOOKUP_GOOD_WITH_BAD = 2,
+ DNS_LOOKUP_BAD = 3,
+ DNS_LOOKUP_GOT_NOT_FOUND = 4,
+ DNS_LOOKUP_GOT_LOCAL_FAILURE = 5,
+ DNS_LOOKUP_GOT_TEMP_FAILURE = 6,
+ DNS_LOOKUP_GOT_NS_FAILURE = 7,
+ NR__dns_lookup_status = 8,
+};
+
+struct dns_payload_header {
+ __u8 zero;
+ __u8 content;
+ __u8 version;
+};
+
+struct dns_server_list_v1_header {
+ struct dns_payload_header hdr;
+ __u8 source;
+ __u8 status;
+ __u8 nr_servers;
+};
+
+struct ida_bitmap {
+ long unsigned int bitmap[16];
+};
+
+struct uevent_sock {
+ struct list_head list;
+ struct sock *sk;
+};
+
+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 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_mode {
+ struct {
+ u32 max_mode;
+ u32 mode;
+ efi_graphics_output_mode_info_t *info;
+ long unsigned int size_of_info;
+ efi_physical_addr_t frame_buffer_base;
+ long unsigned int 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 union efi_graphics_output_protocol_mode efi_graphics_output_protocol_mode_t;
+
+union efi_graphics_output_protocol;
+
+typedef union efi_graphics_output_protocol efi_graphics_output_protocol_t;
+
+union efi_graphics_output_protocol {
+ struct {
+ efi_status_t (*query_mode)(efi_graphics_output_protocol_t *, u32, long unsigned int *, 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;
+};
+
+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,
+};
+
+struct efi_file_path_dev_path {
+ struct efi_generic_dev_path header;
+ efi_char16_t filename[0];
+};
+
+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;
+
+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;
+
+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 *, long unsigned int *, void *);
+ efi_status_t (*write)(efi_file_protocol_t *, long unsigned int, 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 *, long unsigned int *, void *);
+ efi_status_t (*set_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int, 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;
+};
+
+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;
+};
+
+struct finfo {
+ efi_file_info_t info;
+ efi_char16_t filename[256];
+};
+
+enum perf_sample_regs_abi {
+ PERF_SAMPLE_REGS_ABI_NONE = 0,
+ PERF_SAMPLE_REGS_ABI_32 = 1,
+ PERF_SAMPLE_REGS_ABI_64 = 2,
+};
+
+enum perf_event_riscv_regs {
+ PERF_REG_RISCV_PC = 0,
+ PERF_REG_RISCV_RA = 1,
+ PERF_REG_RISCV_SP = 2,
+ PERF_REG_RISCV_GP = 3,
+ PERF_REG_RISCV_TP = 4,
+ PERF_REG_RISCV_T0 = 5,
+ PERF_REG_RISCV_T1 = 6,
+ PERF_REG_RISCV_T2 = 7,
+ PERF_REG_RISCV_S0 = 8,
+ PERF_REG_RISCV_S1 = 9,
+ PERF_REG_RISCV_A0 = 10,
+ PERF_REG_RISCV_A1 = 11,
+ PERF_REG_RISCV_A2 = 12,
+ PERF_REG_RISCV_A3 = 13,
+ PERF_REG_RISCV_A4 = 14,
+ PERF_REG_RISCV_A5 = 15,
+ PERF_REG_RISCV_A6 = 16,
+ PERF_REG_RISCV_A7 = 17,
+ PERF_REG_RISCV_S2 = 18,
+ PERF_REG_RISCV_S3 = 19,
+ PERF_REG_RISCV_S4 = 20,
+ PERF_REG_RISCV_S5 = 21,
+ PERF_REG_RISCV_S6 = 22,
+ PERF_REG_RISCV_S7 = 23,
+ PERF_REG_RISCV_S8 = 24,
+ PERF_REG_RISCV_S9 = 25,
+ PERF_REG_RISCV_S10 = 26,
+ PERF_REG_RISCV_S11 = 27,
+ PERF_REG_RISCV_T3 = 28,
+ PERF_REG_RISCV_T4 = 29,
+ PERF_REG_RISCV_T5 = 30,
+ PERF_REG_RISCV_T6 = 31,
+ PERF_REG_RISCV_MAX = 32,
+};
+
+struct flush_tlb_range_data {
+ long unsigned int asid;
+ long unsigned int start;
+ long unsigned int size;
+ long unsigned int stride;
+};
+
+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 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 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 cpu_down_work {
+ unsigned int cpu;
+ enum cpuhp_state target;
+};
+
+enum cpu_mitigations {
+ CPU_MITIGATIONS_OFF = 0,
+ CPU_MITIGATIONS_AUTO = 1,
+ CPU_MITIGATIONS_AUTO_NOSMT = 2,
+};
+
+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 **sd;
+ struct sched_domain_shared **sds;
+ struct sched_group **sg;
+ struct sched_group_capacity **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;
+};
+
+enum {
+ MEMBARRIER_FLAG_SYNC_CORE = 1,
+ MEMBARRIER_FLAG_RSEQ = 2,
+};
+
+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 cpuacct_stat_index {
+ CPUACCT_STAT_USER = 0,
+ CPUACCT_STAT_SYSTEM = 1,
+ CPUACCT_STAT_NSTATS = 2,
+};
+
+struct cpuacct {
+ struct cgroup_subsys_state css;
+ u64 *cpuusage;
+ struct kernel_cpustat *cpustat;
+};
+
+enum dl_param {
+ DL_RUNTIME = 0,
+ DL_PERIOD = 1,
+};
+
+struct s_data {
+ struct sched_domain **sd;
+ struct root_domain *rd;
+};
+
+enum s_alloc {
+ sa_rootdomain = 0,
+ sa_sd = 1,
+ sa_sd_storage = 2,
+ sa_none = 3,
+};
+
+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,
+};
+
+struct housekeeping {
+ struct cpumask cpumasks[9];
+ long unsigned int flags;
+};
+
+struct kmsg_dump_iter {
+ u64 cur_seq;
+ u64 next_seq;
+};
+
+struct kmsg_dump_detail {
+ enum kmsg_dump_reason reason;
+ const char *description;
+};
+
+struct kmsg_dumper {
+ struct list_head list;
+ void (*dump)(struct kmsg_dumper *, struct kmsg_dump_detail *);
+ enum kmsg_dump_reason max_reason;
+ bool registered;
+};
+
+struct prb_reserved_entry {
+ struct printk_ringbuffer *rb;
+ long unsigned int irqflags;
+ long unsigned int id;
+ unsigned int text_space;
+};
+
+enum desc_state {
+ desc_miss = -1,
+ desc_reserved = 0,
+ desc_committed = 1,
+ desc_finalized = 2,
+ desc_reusable = 3,
+};
+
+struct console_cmdline {
+ char name[16];
+ int index;
+ char devname[32];
+ bool user_specified;
+ char *options;
+};
+
+enum printk_info_flags {
+ LOG_NEWLINE = 2,
+ LOG_CONT = 8,
+};
+
+enum devkmsg_log_bits {
+ __DEVKMSG_LOG_BIT_ON = 0,
+ __DEVKMSG_LOG_BIT_OFF = 1,
+ __DEVKMSG_LOG_BIT_LOCK = 2,
+};
+
+enum devkmsg_log_masks {
+ DEVKMSG_LOG_MASK_ON = 1,
+ DEVKMSG_LOG_MASK_OFF = 2,
+ DEVKMSG_LOG_MASK_LOCK = 4,
+};
+
+enum con_msg_format_flags {
+ MSG_FORMAT_DEFAULT = 0,
+ MSG_FORMAT_SYSLOG = 1,
+};
+
+struct latched_seq {
+ seqcount_latch_t latch;
+ u64 val[2];
+};
+
+struct devkmsg_user {
+ atomic64_t seq;
+ struct ratelimit_state rs;
+ struct mutex lock;
+ struct printk_buffers pbufs;
+};
+
+typedef int (*task_call_f)(struct task_struct *, void *);
+
+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 *);
+
+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;
+ long unsigned int gp_jiffies;
+ long unsigned int gp_start;
+ long unsigned int tasks_gp_seq;
+ long unsigned int n_ipis;
+ long unsigned int n_ipis_fails;
+ struct task_struct *kthread_ptr;
+ long unsigned int 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;
+ unsigned int wait_state;
+ struct rcu_tasks_percpu *rtpcpu;
+ struct rcu_tasks_percpu **rtpcp_array;
+ int percpu_enqueue_shift;
+ int percpu_enqueue_lim;
+ int percpu_dequeue_lim;
+ long unsigned int percpu_dequeue_gpseq;
+ struct mutex barrier_q_mutex;
+ atomic_t barrier_q_count;
+ struct completion barrier_q_completion;
+ long unsigned int barrier_q_seq;
+ long unsigned int barrier_q_start;
+ char *name;
+ char *kname;
+};
+
+struct rcu_tasks_percpu {
+ struct rcu_segcblist cblist;
+ raw_spinlock_t lock;
+ long unsigned int rtp_jiffies;
+ long unsigned int 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;
+ struct list_head rtp_exit_list;
+ int cpu;
+ int index;
+ struct rcu_tasks *rtpp;
+};
+
+struct trc_stall_chk_rdr {
+ int nesting;
+ int ipi_to_cpu;
+ u8 needqs;
+};
+
+struct cma;
+
+struct latch_tree_ops {
+ bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
+ int (*comp)(void *, struct latch_tree_node *);
+};
+
+struct ce_unbind {
+ struct clock_event_device *ce;
+ int res;
+};
+
+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 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];
+};
+
+struct bpf_timer {
+ __u64 __opaque[2];
+};
+
+struct bpf_wq {
+ __u64 __opaque[2];
+};
+
+struct bpf_list_head {
+ __u64 __opaque[2];
+};
+
+struct bpf_list_node {
+ __u64 __opaque[3];
+};
+
+struct bpf_rb_root {
+ __u64 __opaque[2];
+};
+
+struct bpf_rb_node {
+ __u64 __opaque[4];
+};
+
+struct bpf_refcount {
+ __u32 __opaque[1];
+};
+
+struct bpf_pidns_info {
+ __u32 pid;
+ __u32 tgid;
+};
+
+enum {
+ BPF_F_TIMER_ABS = 1,
+ BPF_F_TIMER_CPU_PIN = 2,
+};
+
+enum bpf_kfunc_flags {
+ BPF_F_PAD_ZEROS = 1,
+};
+
+struct bpf_rb_node_kern {
+ struct rb_node rb_node;
+ void *owner;
+};
+
+struct bpf_list_node_kern {
+ struct list_head list_head;
+ void *owner;
+};
+
+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, s64 *);
+
+typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, u64 *);
+
+typedef u64 (*btf_bpf_strncmp)(const char *, u32, const char *);
+
+typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
+
+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 *);
+
+typedef u64 (*btf_bpf_copy_from_user_task)(void *, u32, const void *, struct task_struct *, u64);
+
+typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
+
+typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
+
+struct bpf_bprintf_buffers {
+ char bin_args[512];
+ char buf[1024];
+};
+
+typedef u64 (*btf_bpf_snprintf)(char *, u32, char *, const void *, u32);
+
+struct bpf_async_cb {
+ struct bpf_map *map;
+ struct bpf_prog *prog;
+ void *callback_fn;
+ void *value;
+ union {
+ struct callback_head rcu;
+ struct work_struct delete_work;
+ };
+ u64 flags;
+};
+
+struct bpf_hrtimer {
+ struct bpf_async_cb cb;
+ struct hrtimer timer;
+ atomic_t cancelling;
+};
+
+struct bpf_work {
+ struct bpf_async_cb cb;
+ struct work_struct work;
+ struct work_struct delete_work;
+};
+
+struct bpf_async_kern {
+ union {
+ struct bpf_async_cb *cb;
+ struct bpf_hrtimer *timer;
+ struct bpf_work *work;
+ };
+ struct bpf_spin_lock lock;
+};
+
+enum bpf_async_type {
+ BPF_ASYNC_TYPE_TIMER = 0,
+ BPF_ASYNC_TYPE_WQ = 1,
+};
+
+typedef u64 (*btf_bpf_timer_init)(struct bpf_async_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_timer_set_callback)(struct bpf_async_kern *, void *, struct bpf_prog_aux *);
+
+typedef u64 (*btf_bpf_timer_start)(struct bpf_async_kern *, u64, u64);
+
+typedef u64 (*btf_bpf_timer_cancel)(struct bpf_async_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);
+
+typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
+
+struct bpf_throw_ctx {
+ struct bpf_prog_aux *aux;
+ u64 sp;
+ u64 bp;
+ int cnt;
+};
+
+struct bpf_iter_bits {
+ __u64 __opaque[2];
+};
+
+struct bpf_iter_bits_kern {
+ union {
+ __u64 *bits;
+ __u64 bits_copy;
+ };
+ int nr_bits;
+ int bit;
+};
+
+struct bucket {
+ struct hlist_nulls_head head;
+ raw_spinlock_t raw_lock;
+};
+
+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;
+ union {
+ struct pcpu_freelist freelist;
+ struct bpf_lru lru;
+ };
+ struct htab_elem **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 *map_locked[8];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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_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 *);
+};
+
+struct bpf_offload_dev {
+ const struct bpf_prog_offload_ops *ops;
+ struct list_head netdevs;
+ void *priv;
+};
+
+enum xdp_rx_metadata {
+ XDP_METADATA_KFUNC_RX_TIMESTAMP = 0,
+ XDP_METADATA_KFUNC_RX_HASH = 1,
+ XDP_METADATA_KFUNC_RX_VLAN_TAG = 2,
+ MAX_XDP_METADATA_KFUNC = 3,
+};
+
+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;
+};
+
+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 {
+ BPF_F_SYSCTL_BASE_NAME = 1,
+};
+
+struct bpf_cg_run_ctx {
+ struct bpf_run_ctx run_ctx;
+ const struct bpf_prog_array_item *prog_item;
+ int retval;
+};
+
+typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *, const void *);
+
+struct bpf_sockopt_buf {
+ u8 data[32];
+};
+
+struct bpf_cgroup_link {
+ struct bpf_link link;
+ struct cgroup *cgroup;
+ enum bpf_attach_type type;
+};
+
+struct bpf_prog_list {
+ struct hlist_node node;
+ struct bpf_prog *prog;
+ struct bpf_cgroup_link *link;
+ struct bpf_cgroup_storage *storage[2];
+};
+
+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 *);
+
+enum {
+ XA_CHECK_SCHED = 4096,
+};
+
+struct wb_lock_cookie {
+ bool locked;
+ long unsigned int flags;
+};
+
+struct dirty_throttle_control {
+ struct wb_domain *dom;
+ struct dirty_throttle_control *gdtc;
+ struct bdi_writeback *wb;
+ struct fprop_local_percpu *wb_completions;
+ long unsigned int avail;
+ long unsigned int dirty;
+ long unsigned int thresh;
+ long unsigned int bg_thresh;
+ long unsigned int wb_dirty;
+ long unsigned int wb_thresh;
+ long unsigned int wb_bg_thresh;
+ long unsigned int pos_ratio;
+ bool freerun;
+ bool dirty_exceeded;
+};
+
+struct wb_stats {
+ long unsigned int nr_dirty;
+ long unsigned int nr_io;
+ long unsigned int nr_more_io;
+ long unsigned int nr_dirty_time;
+ long unsigned int nr_writeback;
+ long unsigned int nr_reclaimable;
+ long unsigned int nr_dirtied;
+ long unsigned int nr_written;
+ long unsigned int dirty_thresh;
+ long unsigned int wb_thresh;
+};
+
+enum rmap_level {
+ RMAP_LEVEL_PTE = 0,
+ RMAP_LEVEL_PMD = 1,
+};
+
+struct folio_referenced_arg {
+ int mapcount;
+ int referenced;
+ long unsigned int vm_flags;
+ struct mem_cgroup *memcg;
+};
+
+typedef __int128 unsigned __u128;
+
+typedef __u128 u128;
+
+typedef u128 freelist_full_t;
+
+typedef union {
+ struct {
+ void *freelist;
+ long unsigned int counter;
+ };
+ freelist_full_t full;
+} freelist_aba_t;
+
+struct kmem_cache_cpu {
+ union {
+ struct {
+ void **freelist;
+ long unsigned int tid;
+ };
+ freelist_aba_t freelist_tid;
+ };
+ struct slab *slab;
+ struct slab *partial;
+ local_lock_t lock;
+};
+
+struct kmem_cache_node {
+ spinlock_t list_lock;
+ long unsigned int nr_partial;
+ struct list_head partial;
+ atomic_long_t nr_slabs;
+ atomic_long_t total_objects;
+ struct list_head full;
+};
+
+struct memory_notify {
+ long unsigned int altmap_start_pfn;
+ long unsigned int altmap_nr_pages;
+ long unsigned int start_pfn;
+ long unsigned int nr_pages;
+ int status_change_nid_normal;
+ int status_change_nid;
+};
+
+struct partial_context {
+ gfp_t flags;
+ unsigned int orig_size;
+ void *object;
+};
+
+struct track {
+ long unsigned int addr;
+ depot_stack_handle_t handle;
+ int cpu;
+ int pid;
+ long unsigned int when;
+};
+
+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,
+};
+
+struct slub_flush_work {
+ struct work_struct work;
+ struct kmem_cache *s;
+ bool skip;
+};
+
+struct detached_freelist {
+ struct slab *slab;
+ void *tail;
+ void *freelist;
+ int cnt;
+ struct kmem_cache *s;
+};
+
+struct location {
+ depot_stack_handle_t handle;
+ long unsigned int count;
+ long unsigned int addr;
+ long unsigned int waste;
+ long long int sum_time;
+ long int min_time;
+ long int max_time;
+ long int min_pid;
+ long int max_pid;
+ long unsigned int cpus[1];
+ nodemask_t nodes;
+};
+
+struct loc_track {
+ long unsigned int max;
+ long unsigned int count;
+ struct location *loc;
+ loff_t idx;
+};
+
+enum slab_stat_type {
+ SL_ALL = 0,
+ SL_PARTIAL = 1,
+ SL_CPU = 2,
+ SL_OBJECTS = 3,
+ SL_TOTAL = 4,
+};
+
+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;
+};
+
+struct mmu_notifier_subscriptions {
+ struct hlist_head list;
+ bool has_itree;
+ spinlock_t lock;
+ long unsigned int invalidate_seq;
+ long unsigned int active_invalidate_ranges;
+ struct rb_root_cached itree;
+ wait_queue_head_t wq;
+ struct hlist_head deferred_list;
+};
+
+struct mmu_notifier;
+
+struct mmu_notifier_ops {
+ void (*release)(struct mmu_notifier *, struct mm_struct *);
+ int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+ int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+ int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
+ 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 *, long unsigned int, long unsigned int);
+ struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
+ void (*free_notifier)(struct mmu_notifier *);
+};
+
+struct mmu_notifier {
+ struct hlist_node hlist;
+ const struct mmu_notifier_ops *ops;
+ struct mm_struct *mm;
+ struct callback_head rcu;
+ unsigned int users;
+};
+
+struct mmu_interval_notifier;
+
+struct mmu_interval_notifier_ops {
+ bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);
+};
+
+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;
+ long unsigned int invalidate_seq;
+};
+
+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;
+};
+
+typedef s64 compat_loff_t;
+
+struct dentry_stat_t {
+ long int nr_dentry;
+ long int nr_unused;
+ long int age_limit;
+ long int want_pages;
+ long int nr_negative;
+ long int dummy;
+};
+
+struct external_name {
+ union {
+ atomic_t count;
+ struct callback_head head;
+ } u;
+ unsigned char name[0];
+};
+
+enum d_walk_ret {
+ D_WALK_CONTINUE = 0,
+ D_WALK_QUIT = 1,
+ D_WALK_NORETRY = 2,
+ D_WALK_SKIP = 3,
+};
+
+struct check_mount {
+ struct vfsmount *mnt;
+ unsigned int mounted;
+};
+
+struct select_data {
+ struct dentry *start;
+ union {
+ long int found;
+ struct dentry *victim;
+ };
+ struct list_head dispose;
+};
+
+struct xattr_name {
+ char name[256];
+};
+
+struct xattr_ctx {
+ union {
+ const void *cvalue;
+ void *value;
+ };
+ void *kvalue;
+ size_t size;
+ struct xattr_name *kname;
+ unsigned int flags;
+};
+
+struct dnotify_struct {
+ struct dnotify_struct *dn_next;
+ __u32 dn_mask;
+ int dn_fd;
+ struct file *dn_filp;
+ fl_owner_t dn_owner;
+};
+
+struct dnotify_mark {
+ struct fsnotify_mark fsn_mark;
+ struct dnotify_struct *dn;
+};
+
+struct flock {
+ short int l_type;
+ short int l_whence;
+ __kernel_off_t l_start;
+ __kernel_off_t l_len;
+ __kernel_pid_t l_pid;
+};
+
+struct flock64 {
+ short int l_type;
+ short int l_whence;
+ __kernel_loff_t l_start;
+ __kernel_loff_t l_len;
+ __kernel_pid_t l_pid;
+};
+
+struct file_lock_list_struct {
+ spinlock_t lock;
+ struct hlist_head hlist;
+};
+
+struct locks_iterator {
+ int li_cpu;
+ loff_t li_pos;
+};
+
+struct core_name {
+ char *corename;
+ int used;
+ int size;
+};
+
+struct page_region {
+ __u64 start;
+ __u64 end;
+ __u64 categories;
+};
+
+struct pm_scan_arg {
+ __u64 size;
+ __u64 flags;
+ __u64 start;
+ __u64 end;
+ __u64 walk_end;
+ __u64 vec;
+ __u64 vec_len;
+ __u64 max_pages;
+ __u64 category_inverted;
+ __u64 category_mask;
+ __u64 category_anyof_mask;
+ __u64 return_mask;
+};
+
+enum procmap_query_flags {
+ PROCMAP_QUERY_VMA_READABLE = 1,
+ PROCMAP_QUERY_VMA_WRITABLE = 2,
+ PROCMAP_QUERY_VMA_EXECUTABLE = 4,
+ PROCMAP_QUERY_VMA_SHARED = 8,
+ PROCMAP_QUERY_COVERING_OR_NEXT_VMA = 16,
+ PROCMAP_QUERY_FILE_BACKED_VMA = 32,
+};
+
+struct procmap_query {
+ __u64 size;
+ __u64 query_flags;
+ __u64 query_addr;
+ __u64 vma_start;
+ __u64 vma_end;
+ __u64 vma_flags;
+ __u64 vma_page_size;
+ __u64 vma_offset;
+ __u64 inode;
+ __u32 dev_major;
+ __u32 dev_minor;
+ __u32 vma_name_size;
+ __u32 build_id_size;
+ __u64 vma_name_addr;
+ __u64 build_id_addr;
+};
+
+struct proc_maps_private {
+ struct inode *inode;
+ struct task_struct *task;
+ struct mm_struct *mm;
+ struct vma_iterator iter;
+};
+
+struct mem_size_stats {
+ long unsigned int resident;
+ long unsigned int shared_clean;
+ long unsigned int shared_dirty;
+ long unsigned int private_clean;
+ long unsigned int private_dirty;
+ long unsigned int referenced;
+ long unsigned int anonymous;
+ long unsigned int lazyfree;
+ long unsigned int anonymous_thp;
+ long unsigned int shmem_thp;
+ long unsigned int file_thp;
+ long unsigned int swap;
+ long unsigned int shared_hugetlb;
+ long unsigned int private_hugetlb;
+ long unsigned int ksm;
+ u64 pss;
+ u64 pss_anon;
+ u64 pss_file;
+ u64 pss_shmem;
+ u64 pss_dirty;
+ u64 pss_locked;
+ u64 swap_pss;
+};
+
+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 clear_refs_private {
+ enum clear_refs_types type;
+};
+
+typedef struct {
+ u64 pme;
+} pagemap_entry_t;
+
+struct pagemapread {
+ int pos;
+ int len;
+ pagemap_entry_t *buffer;
+ bool show_pfn;
+};
+
+struct pagemap_scan_private {
+ struct pm_scan_arg arg;
+ long unsigned int masks_of_interest;
+ long unsigned int cur_vma_category;
+ struct page_region *vec_buf;
+ long unsigned int vec_buf_len;
+ long unsigned int vec_buf_index;
+ long unsigned int found_pages;
+ struct page_region *vec_out;
+};
+
+struct pts_mount_opts {
+ int setuid;
+ int setgid;
+ kuid_t uid;
+ kgid_t gid;
+ umode_t mode;
+ umode_t ptmxmode;
+ int reserve;
+ int max;
+};
+
+enum {
+ Opt_uid___5 = 0,
+ Opt_gid___6 = 1,
+ Opt_mode___4 = 2,
+ Opt_ptmxmode = 3,
+ Opt_newinstance = 4,
+ Opt_max = 5,
+ Opt_err___3 = 6,
+};
+
+struct pts_fs_info {
+ struct ida allocated_ptys;
+ struct pts_mount_opts mount_opts;
+ struct super_block *sb;
+ struct dentry *ptmx_dentry;
+};
+
+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;
+};
+
+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;
+};
+
+struct jbd2_journal_block_tail {
+ __be32 t_checksum;
+};
+
+struct recovery_info {
+ tid_t start_transaction;
+ tid_t end_transaction;
+ long unsigned int head_block;
+ int nr_replays;
+ int nr_revokes;
+ int nr_revoke_hits;
+};
+
+struct hugetlbfs_inode_info {
+ struct inode vfs_inode;
+ unsigned int seals;
+};
+
+enum hugetlbfs_size_type {
+ NO_SIZE = 0,
+ SIZE_STD = 1,
+ SIZE_PERCENT = 2,
+};
+
+struct hugetlbfs_fs_context {
+ struct hstate *hstate;
+ long long unsigned int max_size_opt;
+ long long unsigned int min_size_opt;
+ long int max_hpages;
+ long int nr_inodes;
+ long int min_hpages;
+ enum hugetlbfs_size_type max_val_type;
+ enum hugetlbfs_size_type min_val_type;
+ kuid_t uid;
+ kgid_t gid;
+ umode_t mode;
+};
+
+enum hugetlb_param {
+ Opt_gid___7 = 0,
+ Opt_min_size = 1,
+ Opt_mode___5 = 2,
+ Opt_nr_inodes = 3,
+ Opt_pagesize = 4,
+ Opt_size = 5,
+ Opt_uid___6 = 6,
+};
+
+struct nfs_open_dir_context {
+ struct list_head list;
+ atomic_t cache_hits;
+ atomic_t cache_misses;
+ long unsigned int attr_gencount;
+ __be32 verf[2];
+ __u64 dir_cookie;
+ __u64 last_cookie;
+ long unsigned int page_index;
+ unsigned int dtsize;
+ bool force_clear;
+ bool eof;
+ struct callback_head callback_head;
+};
+
+struct nfs_cache_array_entry {
+ u64 cookie;
+ u64 ino;
+ const char *name;
+ unsigned int name_len;
+ unsigned char d_type;
+};
+
+struct nfs_cache_array {
+ u64 change_attr;
+ u64 last_cookie;
+ unsigned int size;
+ unsigned char folio_full: 1;
+ unsigned char folio_is_eof: 1;
+ unsigned char cookies_are_ordered: 1;
+ struct nfs_cache_array_entry array[0];
+};
+
+struct nfs_readdir_descriptor {
+ struct file *file;
+ struct folio *folio;
+ struct dir_context *ctx;
+ long unsigned int folio_index;
+ long unsigned int folio_index_max;
+ u64 dir_cookie;
+ u64 last_cookie;
+ loff_t current_index;
+ __be32 verf[2];
+ long unsigned int dir_verifier;
+ long unsigned int timestamp;
+ long unsigned int gencount;
+ long unsigned int attr_gencount;
+ unsigned int cache_entry_index;
+ unsigned int buffer_fills;
+ unsigned int dtsize;
+ bool clear_cache;
+ bool plus;
+ bool eob;
+ bool eof;
+};
+
+struct nfs_io_completion {
+ void (*complete)(void *);
+ void *data;
+ struct kref refcount;
+};
+
+struct nfs4_ssc_client_ops {
+ struct file * (*sco_open)(struct vfsmount *, struct nfs_fh *, nfs4_stateid *);
+ void (*sco_close)(struct file *);
+};
+
+enum pnfs_layout_destroy_mode {
+ PNFS_LAYOUT_INVALIDATE = 0,
+ PNFS_LAYOUT_BULK_RETURN = 1,
+ PNFS_LAYOUT_FILE_BULK_RETURN = 2,
+};
+
+enum {
+ AUTOFS_IOC_READY_CMD = 96,
+ AUTOFS_IOC_FAIL_CMD = 97,
+ AUTOFS_IOC_CATATONIC_CMD = 98,
+ AUTOFS_IOC_PROTOVER_CMD = 99,
+ AUTOFS_IOC_SETTIMEOUT_CMD = 100,
+ AUTOFS_IOC_EXPIRE_CMD = 101,
+};
+
+enum {
+ AUTOFS_IOC_EXPIRE_MULTI_CMD = 102,
+ AUTOFS_IOC_PROTOSUBVER_CMD = 103,
+ AUTOFS_IOC_ASKUMOUNT_CMD = 112,
+};
+
+struct p9_flock {
+ u8 type;
+ u32 flags;
+ u64 start;
+ u64 length;
+ u32 proc_id;
+ char *client_id;
+};
+
+struct p9_getlock {
+ u8 type;
+ u64 start;
+ u64 length;
+ u32 proc_id;
+ char *client_id;
+};
+
+struct ipc_proc_iface {
+ const char *path;
+ const char *header;
+ int ids;
+ int (*show)(struct seq_file *, void *);
+};
+
+struct ipc_proc_iter {
+ struct ipc_namespace *ns;
+ struct pid_namespace *pid_ns;
+ struct ipc_proc_iface *iface;
+};
+
+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 netport_security_struct {
+ u32 sid;
+ u16 port;
+ u8 protocol;
+};
+
+struct sel_netport_bkt {
+ int size;
+ struct list_head list;
+};
+
+struct sel_netport {
+ struct netport_security_struct psec;
+ struct list_head list;
+ struct callback_head rcu;
+};
+
+struct audit_cache {
+ struct aa_profile *profile;
+ kernel_cap_t caps;
+};
+
+struct crypto_hash_walk {
+ char *data;
+ unsigned int offset;
+ unsigned int flags;
+ struct page *pg;
+ unsigned int entrylen;
+ unsigned int total;
+ struct scatterlist *sg;
+};
+
+struct ahash_instance {
+ void (*free)(struct ahash_instance *);
+ union {
+ struct {
+ char head[96];
+ struct crypto_instance base;
+ } s;
+ struct ahash_alg alg;
+ };
+};
+
+struct crypto_ahash_spawn {
+ struct crypto_spawn 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 crypto_test_param {
+ char driver[128];
+ char alg[128];
+ u32 type;
+};
+
+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;
+};
+
+enum {
+ BLK_MQ_UNIQUE_TAG_BITS = 16,
+ BLK_MQ_UNIQUE_TAG_MASK = 65535,
+};
+
+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 badblocks_context {
+ sector_t start;
+ sector_t len;
+ int ack;
+};
+
+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 bool acquire_inflight_cb_t(struct rq_wait *, void *);
+
+typedef void cleanup_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;
+};
+
+enum dd_data_dir {
+ DD_READ = 0,
+ DD_WRITE = 1,
+};
+
+enum {
+ DD_DIR_COUNT = 2,
+};
+
+enum dd_prio {
+ DD_RT_PRIO = 0,
+ DD_BE_PRIO = 1,
+ DD_IDLE_PRIO = 2,
+ DD_PRIO_MAX = 2,
+};
+
+enum {
+ DD_PRIO_COUNT = 3,
+};
+
+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;
+};
+
+struct show_busy_params {
+ struct seq_file *m;
+ struct blk_mq_hw_ctx *hctx;
+};
+
+struct iov_iter_state {
+ size_t iov_offset;
+ size_t count;
+ long unsigned int nr_segs;
+};
+
+struct io_async_rw {
+ size_t bytes_done;
+ struct iov_iter iter;
+ struct iov_iter_state iter_state;
+ struct iovec fast_iov;
+ struct iovec *free_iovec;
+ int free_iov_nr;
+ struct wait_page_queue wpq;
+};
+
+struct io_rw {
+ struct kiocb kiocb;
+ u64 addr;
+ u32 len;
+ rwf_t flags;
+};
+
+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;
+};
+
+enum {
+ IO_SQ_THREAD_SHOULD_STOP = 0,
+ IO_SQ_THREAD_SHOULD_PARK = 1,
+};
+
+struct io_uring_sync_cancel_reg {
+ __u64 addr;
+ __s32 fd;
+ __u32 flags;
+ struct __kernel_timespec timeout;
+ __u8 opcode;
+ __u8 pad[7];
+ __u64 pad2[3];
+};
+
+struct io_cancel {
+ struct file *file;
+ u64 addr;
+ u32 flags;
+ s32 fd;
+ u8 opcode;
+};
+
+struct wrapper {
+ cmp_func_t cmp;
+ swap_func_t swap;
+};
+
+struct region {
+ unsigned int start;
+ unsigned int off;
+ unsigned int group_len;
+ unsigned int end;
+ unsigned int nbits;
+};
+
+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 enum {
+ ZSTD_lo_isRegularOffset = 0,
+ ZSTD_lo_isLongOffset = 1,
+} ZSTD_longOffset_e;
+
+struct nla_bitfield32 {
+ __u32 value;
+ __u32 selector;
+};
+
+struct node_groups {
+ unsigned int id;
+ union {
+ unsigned int ngroups;
+ unsigned int ncpus;
+ };
+};
+
+struct pinctrl_maps {
+ struct list_head node;
+ const struct pinctrl_map *maps;
+ unsigned int num_maps;
+};
+
+struct pctldev;
+
+enum SG2000_POWER_DOMAIN {
+ VDD18A_EPHY = 0,
+ VDD18A_MIPI___2 = 1,
+ VDDIO18_1 = 2,
+ VDDIO_EMMC = 3,
+ VDDIO_RTC___3 = 4,
+ VDDIO_SD0 = 5,
+ VDDIO_SD1___2 = 6,
+ VDDIO_VIVO = 7,
+};
+
+struct gpio_pin_range {
+ struct list_head node;
+ struct pinctrl_dev *pctldev;
+ struct pinctrl_gpio_range range;
+};
+
+struct gpiod_lookup {
+ const char *key;
+ u16 chip_hwnum;
+ const char *con_id;
+ unsigned int idx;
+ long unsigned int flags;
+};
+
+struct gpiod_lookup_table {
+ struct list_head list;
+ const char *dev_id;
+ struct gpiod_lookup table[0];
+};
+
+struct gpiod_hog {
+ struct list_head list;
+ const char *chip_label;
+ u16 chip_hwnum;
+ const char *line_name;
+ long unsigned int lflags;
+ int dflags;
+};
+
+enum {
+ GPIOLINE_CHANGED_REQUESTED = 1,
+ GPIOLINE_CHANGED_RELEASED = 2,
+ GPIOLINE_CHANGED_CONFIG = 3,
+};
+
+struct gpiolib_seq_priv {
+ bool newline;
+ int idx;
+};
+
+struct fb_cvt_data {
+ u32 xres;
+ u32 yres;
+ u32 refresh;
+ u32 f_refresh;
+ u32 pixclock;
+ u32 hperiod;
+ u32 hblank;
+ u32 hfreq;
+ u32 htotal;
+ u32 vtotal;
+ u32 vsync;
+ u32 hsync;
+ u32 h_front_porch;
+ u32 h_back_porch;
+ u32 v_front_porch;
+ u32 v_back_porch;
+ u32 h_margin;
+ u32 v_margin;
+ u32 interlace;
+ u32 aspect_ratio;
+ u32 active_pixels;
+ u32 flags;
+ u32 status;
+};
+
+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 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 display_timings {
+ unsigned int num_timings;
+ unsigned int native_mode;
+ struct display_timing **timings;
+};
+
+struct videomode {
+ long unsigned int 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 nvs_region {
+ __u64 phys_start;
+ __u64 size;
+ struct list_head node;
+};
+
+struct acpi_table_stao {
+ struct acpi_table_header header;
+ u8 ignore_uart;
+} __attribute__((packed));
+
+struct acpi_dep_data {
+ struct list_head node;
+ acpi_handle supplier;
+ acpi_handle consumer;
+ bool honor_dep;
+ bool met;
+ bool free_when_met;
+};
+
+struct dma_map_ops {
+ void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, long unsigned int);
+ void (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int);
+ struct page * (*alloc_pages_op)(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);
+ int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int);
+ int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);
+ dma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);
+ void (*unmap_page)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
+ int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
+ void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
+ dma_addr_t (*map_resource)(struct device *, phys_addr_t, size_t, enum dma_data_direction, long unsigned int);
+ void (*unmap_resource)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
+ 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)();
+ long unsigned int (*get_merge_boundary)(struct device *);
+};
+
+struct acpi_device_bus_id {
+ const char *bus_id;
+ struct ida instance_ida;
+ struct list_head node;
+};
+
+struct acpi_scan_clear_dep_work {
+ struct work_struct work;
+ struct acpi_device *adev;
+};
+
+struct acpi_irq_parse_one_ctx {
+ int rc;
+ unsigned int index;
+ long unsigned int *res_flags;
+ struct irq_fwspec *fwspec;
+};
+
+struct acpi_signal_fatal_info {
+ u32 type;
+ u32 code;
+ u32 argument;
+};
+
+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;
+};
+
+typedef u32 (*acpi_event_handler)(void *);
+
+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 acpi_button {
+ unsigned int type;
+ struct input_dev *input;
+ char phys[32];
+ long unsigned int pushed;
+ int last_state;
+ ktime_t last_time;
+ bool suspended;
+ bool lid_state_initialized;
+};
+
+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 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 acpi_madt_aplic {
+ struct acpi_subtable_header header;
+ u8 version;
+ u8 id;
+ u32 flags;
+ u8 hw_id[8];
+ u16 num_idcs;
+ u16 num_sources;
+ u32 gsi_base;
+ u64 base_addr;
+ u32 size;
+} __attribute__((packed));
+
+struct acpi_madt_plic {
+ struct acpi_subtable_header header;
+ u8 version;
+ u8 id;
+ u8 hw_id[8];
+ u16 num_irqs;
+ u16 max_prio;
+ u32 flags;
+ u32 size;
+ u64 base_addr;
+ u32 gsi_base;
+} __attribute__((packed));
+
+enum riscv_irqchip_type {
+ ACPI_RISCV_IRQCHIP_INTC = 0,
+ ACPI_RISCV_IRQCHIP_IMSIC = 1,
+ ACPI_RISCV_IRQCHIP_PLIC = 2,
+ ACPI_RISCV_IRQCHIP_APLIC = 3,
+};
+
+struct riscv_ext_intc_list {
+ acpi_handle handle;
+ u32 gsi_base;
+ u32 nr_irqs;
+ u32 nr_idcs;
+ u32 id;
+ u32 type;
+ struct list_head list;
+};
+
+struct acpi_irq_dep_ctx {
+ int rc;
+ unsigned int index;
+ acpi_handle handle;
+};
+
+struct acpipnp_parse_option_s {
+ struct pnp_dev *dev;
+ unsigned int option_flags;
+};
+
+struct clk_fixed_rate {
+ struct clk_hw hw;
+ long unsigned int fixed_rate;
+ long unsigned int fixed_accuracy;
+ long unsigned int flags;
+};
+
+struct mpfs_ccc_data {
+ void **pll_base;
+ struct device *dev;
+ struct clk_hw_onecell_data hw_data;
+};
+
+struct mpfs_ccc_pll_hw_clock {
+ void *base;
+ const char *name;
+ const struct clk_parent_data *parents;
+ unsigned int id;
+ u32 reg_offset;
+ u32 shift;
+ u32 width;
+ u32 flags;
+ struct clk_hw hw;
+ struct clk_init_data init;
+};
+
+struct mpfs_ccc_out_hw_clock {
+ struct clk_divider divider;
+ struct clk_init_data init;
+ unsigned int id;
+ u32 reg_offset;
+};
+
+struct acpi_table_csrt {
+ struct acpi_table_header header;
+};
+
+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_dma_spec {
+ int chan_id;
+ int slave_id;
+ struct device *dev;
+};
+
+struct acpi_dma {
+ struct list_head dma_controllers;
+ struct device *dev;
+ struct dma_chan * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);
+ void *data;
+ short unsigned int base_request_line;
+ short unsigned int end_request_line;
+};
+
+struct acpi_dma_filter_info {
+ dma_cap_mask_t dma_cap;
+ dma_filter_fn filter_fn;
+};
+
+struct acpi_dma_parser_data {
+ struct acpi_dma_spec dma_spec;
+ size_t index;
+ size_t n;
+};
+
+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 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;
+};
+
+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;
+ bool hw_mode;
+ void *data;
+};
+
+enum virtio_input_config_select {
+ VIRTIO_INPUT_CFG_UNSET = 0,
+ VIRTIO_INPUT_CFG_ID_NAME = 1,
+ VIRTIO_INPUT_CFG_ID_SERIAL = 2,
+ VIRTIO_INPUT_CFG_ID_DEVIDS = 3,
+ VIRTIO_INPUT_CFG_PROP_BITS = 16,
+ VIRTIO_INPUT_CFG_EV_BITS = 17,
+ VIRTIO_INPUT_CFG_ABS_INFO = 18,
+};
+
+struct virtio_input_absinfo {
+ __le32 min;
+ __le32 max;
+ __le32 fuzz;
+ __le32 flat;
+ __le32 res;
+};
+
+struct virtio_input_devids {
+ __le16 bustype;
+ __le16 vendor;
+ __le16 product;
+ __le16 version;
+};
+
+struct virtio_input_config {
+ __u8 select;
+ __u8 subsel;
+ __u8 size;
+ __u8 reserved[5];
+ union {
+ char string[128];
+ __u8 bitmap[128];
+ struct virtio_input_absinfo abs;
+ struct virtio_input_devids ids;
+ } u;
+};
+
+struct virtio_input_event {
+ __le16 type;
+ __le16 code;
+ __le32 value;
+};
+
+struct virtio_input {
+ struct virtio_device *vdev;
+ struct input_dev *idev;
+ char name[64];
+ char serial[64];
+ char phys[64];
+ struct virtqueue *evt;
+ struct virtqueue *sts;
+ struct virtio_input_event evts[64];
+ spinlock_t lock;
+ bool ready;
+};
+
+struct jh71x0_reset {
+ struct reset_controller_dev rcdev;
+ spinlock_t lock;
+ void *assert;
+ void *status;
+ const u32 *asserted;
+};
+
+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;
+ short unsigned int close_delay;
+ char io_type;
+ char reserved_char;
+ compat_int_t hub6;
+ short unsigned int closing_wait;
+ short unsigned int closing_wait2;
+ compat_uint_t iomem_base;
+ short unsigned int iomem_reg_shift;
+ unsigned int port_high;
+ compat_int_t reserved;
+};
+
+struct kbdiacr {
+ unsigned char diacr;
+ unsigned char base;
+ unsigned char result;
+};
+
+struct kbdiacrs {
+ unsigned int kb_cnt;
+ struct kbdiacr kbdiacr[256];
+};
+
+struct kbdiacrsuc {
+ unsigned int kb_cnt;
+ struct kbdiacruc kbdiacruc[256];
+};
+
+struct keyboard_notifier_param {
+ struct vc_data *vc;
+ int down;
+ int shift;
+ int ledstate;
+ unsigned int value;
+};
+
+struct kbd_struct {
+ unsigned char lockstate;
+ unsigned char slockstate;
+ unsigned char ledmode: 1;
+ unsigned char ledflagstate: 4;
+ char: 3;
+ unsigned char default_ledflagstate: 4;
+ unsigned char kbdmode: 3;
+ int: 1;
+ unsigned char modeflags: 5;
+};
+
+typedef void k_handler_fn(struct vc_data *, unsigned char, char);
+
+typedef void fn_handler_fn(struct vc_data *);
+
+struct getset_keycode_data {
+ struct input_keymap_entry ke;
+ int error;
+};
+
+struct serial8250_config {
+ const char *name;
+ short unsigned int fifo_size;
+ short unsigned int tx_loadsz;
+ unsigned char fcr;
+ unsigned char rxtrig_bytes[4];
+ unsigned int flags;
+};
+
+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 serial_private;
+
+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 f815xxa_data {
+ spinlock_t lock;
+ int idx;
+};
+
+struct timedia_struct {
+ int num;
+ const short unsigned int *ids;
+};
+
+enum {
+ MOXA_SUPP_RS232 = 1,
+ MOXA_SUPP_RS422 = 2,
+ MOXA_SUPP_RS485 = 4,
+};
+
+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_moxa_2 = 113,
+ pbn_moxa_4 = 114,
+ pbn_moxa_8 = 115,
+};
+
+struct sun50i_iommu {
+ struct iommu_device iommu;
+ spinlock_t iommu_lock;
+ struct device *dev;
+ void *base;
+ struct reset_control *reset;
+ struct clk *clk;
+ struct iommu_domain *domain;
+ struct kmem_cache *pt_pool;
+};
+
+struct sun50i_iommu_domain {
+ struct iommu_domain domain;
+ refcount_t refcnt;
+ u32 *dt;
+ dma_addr_t dt_dma;
+ struct sun50i_iommu *iommu;
+};
+
+enum sun50i_iommu_aci {
+ SUN50I_IOMMU_ACI_DO_NOT_USE = 0,
+ SUN50I_IOMMU_ACI_NONE = 1,
+ SUN50I_IOMMU_ACI_RD = 2,
+ SUN50I_IOMMU_ACI_WR = 3,
+ SUN50I_IOMMU_ACI_RD_WR = 4,
+};
+
+enum scale_freq_source {
+ SCALE_FREQ_SOURCE_CPUFREQ = 0,
+ SCALE_FREQ_SOURCE_ARCH = 1,
+ SCALE_FREQ_SOURCE_CPPC = 2,
+};
+
+struct scale_freq_data {
+ enum scale_freq_source source;
+ void (*set_freq_scale)();
+};
+
+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 perf_pmu_events_attr {
+ struct device_attribute attr;
+ u64 id;
+ const char *event_str;
+};
+
+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 {
+ CTL_RES_CNT = 1,
+};
+
+enum {
+ CTL_RES_TM = 2,
+};
+
+enum {
+ POWERON_SECS = 3,
+};
+
+enum {
+ MEM_LIFE = 4,
+};
+
+enum {
+ CRI_RES_UTIL = 5,
+};
+
+enum {
+ HOST_L_CNT = 6,
+};
+
+enum {
+ HOST_S_CNT = 7,
+};
+
+enum {
+ HOST_S_DUR = 8,
+};
+
+enum {
+ HOST_L_DUR = 9,
+};
+
+enum {
+ MED_R_CNT = 10,
+};
+
+enum {
+ MED_W_CNT = 11,
+};
+
+enum {
+ MED_R_DUR = 12,
+};
+
+enum {
+ MED_W_DUR = 13,
+};
+
+enum {
+ CACHE_RH_CNT = 14,
+};
+
+enum {
+ CACHE_WH_CNT = 15,
+};
+
+enum {
+ FAST_W_CNT = 16,
+};
+
+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;
+};
+
+struct default_wait_cb {
+ struct dma_fence_cb base;
+ struct task_struct *task;
+};
+
+struct virtio_scsi_cmd_req {
+ __u8 lun[8];
+ __virtio64 tag;
+ __u8 task_attr;
+ __u8 prio;
+ __u8 crn;
+ __u8 cdb[32];
+} __attribute__((packed));
+
+struct virtio_scsi_cmd_req_pi {
+ __u8 lun[8];
+ __virtio64 tag;
+ __u8 task_attr;
+ __u8 prio;
+ __u8 crn;
+ __virtio32 pi_bytesout;
+ __virtio32 pi_bytesin;
+ __u8 cdb[32];
+} __attribute__((packed));
+
+struct virtio_scsi_cmd_resp {
+ __virtio32 sense_len;
+ __virtio32 resid;
+ __virtio16 status_qualifier;
+ __u8 status;
+ __u8 response;
+ __u8 sense[96];
+};
+
+struct virtio_scsi_ctrl_tmf_req {
+ __virtio32 type;
+ __virtio32 subtype;
+ __u8 lun[8];
+ __virtio64 tag;
+};
+
+struct virtio_scsi_ctrl_tmf_resp {
+ __u8 response;
+};
+
+struct virtio_scsi_ctrl_an_req {
+ __virtio32 type;
+ __u8 lun[8];
+ __virtio32 event_requested;
+};
+
+struct virtio_scsi_ctrl_an_resp {
+ __virtio32 event_actual;
+ __u8 response;
+} __attribute__((packed));
+
+struct virtio_scsi_event {
+ __virtio32 event;
+ __u8 lun[8];
+ __virtio32 reason;
+};
+
+struct virtio_scsi_config {
+ __virtio32 num_queues;
+ __virtio32 seg_max;
+ __virtio32 max_sectors;
+ __virtio32 cmd_per_lun;
+ __virtio32 event_info_size;
+ __virtio32 sense_size;
+ __virtio32 cdb_size;
+ __virtio16 max_channel;
+ __virtio16 max_target;
+ __virtio32 max_lun;
+};
+
+struct virtio_scsi_cmd {
+ struct scsi_cmnd *sc;
+ struct completion *comp;
+ union {
+ struct virtio_scsi_cmd_req cmd;
+ struct virtio_scsi_cmd_req_pi cmd_pi;
+ struct virtio_scsi_ctrl_tmf_req tmf;
+ struct virtio_scsi_ctrl_an_req an;
+ } req;
+ union {
+ struct virtio_scsi_cmd_resp cmd;
+ struct virtio_scsi_ctrl_tmf_resp tmf;
+ struct virtio_scsi_ctrl_an_resp an;
+ struct virtio_scsi_event evt;
+ } resp;
+ long: 64;
+} __attribute__((packed));
+
+struct virtio_scsi;
+
+struct virtio_scsi_event_node {
+ struct virtio_scsi *vscsi;
+ struct virtio_scsi_event event;
+ struct work_struct work;
+};
+
+struct virtio_scsi_vq {
+ spinlock_t vq_lock;
+ struct virtqueue *vq;
+};
+
+struct virtio_scsi {
+ struct virtio_device *vdev;
+ struct virtio_scsi_event_node event_list[8];
+ u32 num_queues;
+ int io_queues[3];
+ struct hlist_node node;
+ bool stop_events;
+ struct virtio_scsi_vq ctrl_vq;
+ struct virtio_scsi_vq event_vq;
+ struct virtio_scsi_vq req_vqs[0];
+};
+
+struct mtd_concat {
+ struct mtd_info mtd;
+ int num_subdev;
+ struct mtd_info **subdev;
+};
+
+struct sifive_spi {
+ void *regs;
+ struct clk *clk;
+ unsigned int fifo_depth;
+ u32 cs_inactive;
+ struct completion done;
+};
+
+enum {
+ ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC = 0,
+ ETHTOOL_A_CABLE_RESULT_CODE_OK = 1,
+ ETHTOOL_A_CABLE_RESULT_CODE_OPEN = 2,
+ ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT = 3,
+ ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT = 4,
+ ETHTOOL_A_CABLE_RESULT_CODE_IMPEDANCE_MISMATCH = 5,
+ ETHTOOL_A_CABLE_RESULT_CODE_NOISE = 6,
+ ETHTOOL_A_CABLE_RESULT_CODE_RESOLUTION_NOT_POSSIBLE = 7,
+};
+
+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_CABLE_INF_SRC_UNSPEC = 0,
+ ETHTOOL_A_CABLE_INF_SRC_TDR = 1,
+ ETHTOOL_A_CABLE_INF_SRC_ALCD = 2,
+};
+
+struct pps_event_time {
+ struct timespec64 ts_real;
+};
+
+enum ptp_clock_events {
+ PTP_CLOCK_ALARM = 0,
+ PTP_CLOCK_EXTTS = 1,
+ PTP_CLOCK_EXTOFF = 2,
+ PTP_CLOCK_PPS = 3,
+ PTP_CLOCK_PPSUSR = 4,
+};
+
+struct ptp_clock_event {
+ int type;
+ int index;
+ union {
+ u64 timestamp;
+ s64 offset;
+ struct pps_event_time pps_times;
+ };
+};
+
+struct kszphy_hw_stat {
+ const char *string;
+ u8 reg;
+ u8 bits;
+};
+
+struct kszphy_type {
+ u32 led_mode_reg;
+ u16 interrupt_level_mask;
+ u16 cable_diag_reg;
+ long unsigned int pair_mask;
+ u16 disable_dll_tx_bit;
+ u16 disable_dll_rx_bit;
+ u16 disable_dll_mask;
+ bool has_broadcast_disable;
+ bool has_nand_tree_disable;
+ bool has_rmii_ref_clk_sel;
+};
+
+struct lan8814_shared_priv {
+ struct phy_device *phydev;
+ struct ptp_clock *ptp_clock;
+ struct ptp_clock_info ptp_clock_info;
+ struct ptp_pin_desc *pin_config;
+ struct mutex shared_lock;
+};
+
+struct lan8814_ptp_rx_ts {
+ struct list_head list;
+ u32 seconds;
+ u32 nsec;
+ u16 seq_id;
+};
+
+struct kszphy_ptp_priv {
+ struct mii_timestamper mii_ts;
+ struct phy_device *phydev;
+ struct sk_buff_head tx_queue;
+ struct sk_buff_head rx_queue;
+ struct list_head rx_ts_list;
+ spinlock_t rx_ts_lock;
+ int hwts_tx_type;
+ enum hwtstamp_rx_filters rx_filter;
+ int layer;
+ int version;
+ struct ptp_clock *ptp_clock;
+ struct ptp_clock_info ptp_clock_info;
+ struct mutex ptp_lock;
+ struct ptp_pin_desc *pin_config;
+ s64 seconds;
+ spinlock_t seconds_lock;
+};
+
+struct kszphy_priv {
+ struct kszphy_ptp_priv ptp_priv;
+ const struct kszphy_type *type;
+ int led_mode;
+ u16 vct_ctrl1000;
+ bool rmii_ref_clk_sel;
+ bool rmii_ref_clk_sel_val;
+ u64 stats[2];
+};
+
+struct ksz9477_errata_write {
+ u8 dev_addr;
+ u8 reg_addr;
+ u16 val;
+};
+
+typedef void (*rtl_fw_write_t)(struct rtl8169_private *, int, int);
+
+typedef int (*rtl_fw_read_t)(struct rtl8169_private *, int);
+
+struct rtl_fw_phy_action {
+ __le32 *code;
+ size_t size;
+};
+
+struct rtl_fw {
+ rtl_fw_write_t phy_write;
+ rtl_fw_read_t phy_read;
+ rtl_fw_write_t mac_mcu_write;
+ rtl_fw_read_t mac_mcu_read;
+ const struct firmware *fw;
+ const char *fw_name;
+ struct device *dev;
+ char version[32];
+ struct rtl_fw_phy_action phy_action;
+};
+
+enum rtl_fw_opcode {
+ PHY_READ = 0,
+ PHY_DATA_OR = 1,
+ PHY_DATA_AND = 2,
+ PHY_BJMPN = 3,
+ PHY_MDIO_CHG = 4,
+ PHY_CLEAR_READCOUNT = 7,
+ PHY_WRITE = 8,
+ PHY_READCOUNT_EQ_SKIP = 9,
+ PHY_COMP_EQ_SKIPN = 10,
+ PHY_COMP_NEQ_SKIPN = 11,
+ PHY_WRITE_PREVIOUS = 12,
+ PHY_SKIPN = 13,
+ PHY_DELAY_MS = 14,
+};
+
+struct fw_info {
+ u32 magic;
+ char version[32];
+ __le32 fw_start;
+ __le32 fw_len;
+ u8 chksum;
+} __attribute__((packed));
+
+struct cdrom_msf {
+ __u8 cdmsf_min0;
+ __u8 cdmsf_sec0;
+ __u8 cdmsf_frame0;
+ __u8 cdmsf_min1;
+ __u8 cdmsf_sec1;
+ __u8 cdmsf_frame1;
+};
+
+struct cdrom_volctrl {
+ __u8 channel0;
+ __u8 channel1;
+ __u8 channel2;
+ __u8 channel3;
+};
+
+struct cdrom_subchnl {
+ __u8 cdsc_format;
+ __u8 cdsc_audiostatus;
+ __u8 cdsc_adr: 4;
+ __u8 cdsc_ctrl: 4;
+ __u8 cdsc_trk;
+ __u8 cdsc_ind;
+ union cdrom_addr cdsc_absaddr;
+ union cdrom_addr cdsc_reladdr;
+};
+
+struct cdrom_read_audio {
+ union cdrom_addr addr;
+ __u8 addr_format;
+ int nframes;
+ __u8 *buf;
+};
+
+struct cdrom_blk {
+ unsigned int from;
+ short unsigned int len;
+};
+
+struct cdrom_timed_media_change_info {
+ __s64 last_media_change;
+ __u64 media_flags;
+};
+
+struct dvd_layer {
+ __u8 book_version: 4;
+ __u8 book_type: 4;
+ __u8 min_rate: 4;
+ __u8 disc_size: 4;
+ __u8 layer_type: 4;
+ __u8 track_path: 1;
+ __u8 nlayers: 2;
+ char: 1;
+ __u8 track_density: 4;
+ __u8 linear_density: 4;
+ __u8 bca: 1;
+ __u32 start_sector;
+ __u32 end_sector;
+ __u32 end_sector_l0;
+};
+
+struct dvd_physical {
+ __u8 type;
+ __u8 layer_num;
+ struct dvd_layer layer[4];
+};
+
+struct dvd_copyright {
+ __u8 type;
+ __u8 layer_num;
+ __u8 cpst;
+ __u8 rmi;
+};
+
+struct dvd_disckey {
+ __u8 type;
+ unsigned int agid: 2;
+ __u8 value[2048];
+};
+
+struct dvd_bca {
+ __u8 type;
+ int len;
+ __u8 value[188];
+};
+
+struct dvd_manufact {
+ __u8 type;
+ __u8 layer_num;
+ int len;
+ __u8 value[2048];
+};
+
+typedef union {
+ __u8 type;
+ struct dvd_physical physical;
+ struct dvd_copyright copyright;
+ struct dvd_disckey disckey;
+ struct dvd_bca bca;
+ struct dvd_manufact manufact;
+} dvd_struct;
+
+typedef __u8 dvd_key[5];
+
+typedef __u8 dvd_challenge[10];
+
+struct dvd_lu_send_agid {
+ __u8 type;
+ unsigned int agid: 2;
+};
+
+struct dvd_host_send_challenge {
+ __u8 type;
+ unsigned int agid: 2;
+ dvd_challenge chal;
+};
+
+struct dvd_send_key {
+ __u8 type;
+ unsigned int agid: 2;
+ dvd_key key;
+};
+
+struct dvd_lu_send_challenge {
+ __u8 type;
+ unsigned int agid: 2;
+ dvd_challenge chal;
+};
+
+struct dvd_lu_send_title_key {
+ __u8 type;
+ unsigned int agid: 2;
+ dvd_key title_key;
+ int lba;
+ unsigned int cpm: 1;
+ unsigned int cp_sec: 1;
+ unsigned int cgms: 2;
+};
+
+struct dvd_lu_send_asf {
+ __u8 type;
+ unsigned int agid: 2;
+ unsigned int asf: 1;
+};
+
+struct dvd_host_send_rpcstate {
+ __u8 type;
+ __u8 pdrc;
+};
+
+struct dvd_lu_send_rpcstate {
+ __u8 type: 2;
+ __u8 vra: 3;
+ __u8 ucca: 3;
+ __u8 region_mask;
+ __u8 rpc_scheme;
+};
+
+typedef union {
+ __u8 type;
+ struct dvd_lu_send_agid lsa;
+ struct dvd_host_send_challenge hsc;
+ struct dvd_send_key lsk;
+ struct dvd_lu_send_challenge lsc;
+ struct dvd_send_key hsk;
+ struct dvd_lu_send_title_key lstk;
+ struct dvd_lu_send_asf lsasf;
+ struct dvd_host_send_rpcstate hrpcs;
+ struct dvd_lu_send_rpcstate lrpcs;
+} dvd_authinfo;
+
+struct mrw_feature_desc {
+ __be16 feature_code;
+ __u8 curr: 1;
+ __u8 persistent: 1;
+ __u8 feature_version: 4;
+ __u8 reserved1: 2;
+ __u8 add_len;
+ __u8 write: 1;
+ __u8 reserved2: 7;
+ __u8 reserved3;
+ __u8 reserved4;
+ __u8 reserved5;
+};
+
+struct rwrt_feature_desc {
+ __be16 feature_code;
+ __u8 curr: 1;
+ __u8 persistent: 1;
+ __u8 feature_version: 4;
+ __u8 reserved1: 2;
+ __u8 add_len;
+ __u32 last_lba;
+ __u32 block_size;
+ __u16 blocking;
+ __u8 page_present: 1;
+ __u8 reserved2: 7;
+ __u8 reserved3;
+};
+
+typedef struct {
+ __be16 disc_information_length;
+ __u8 disc_status: 2;
+ __u8 border_status: 2;
+ __u8 erasable: 1;
+ __u8 reserved1: 3;
+ __u8 n_first_track;
+ __u8 n_sessions_lsb;
+ __u8 first_track_lsb;
+ __u8 last_track_lsb;
+ __u8 mrw_status: 2;
+ __u8 dbit: 1;
+ __u8 reserved2: 2;
+ __u8 uru: 1;
+ __u8 dbc_v: 1;
+ __u8 did_v: 1;
+ __u8 disc_type;
+ __u8 n_sessions_msb;
+ __u8 first_track_msb;
+ __u8 last_track_msb;
+ __u32 disc_id;
+ __u32 lead_in;
+ __u32 lead_out;
+ __u8 disc_bar_code[8];
+ __u8 reserved3;
+ __u8 n_opc;
+} disc_information;
+
+typedef struct {
+ __be16 track_information_length;
+ __u8 track_lsb;
+ __u8 session_lsb;
+ __u8 reserved1;
+ __u8 track_mode: 4;
+ __u8 copy: 1;
+ __u8 damage: 1;
+ __u8 reserved2: 2;
+ __u8 data_mode: 4;
+ __u8 fp: 1;
+ __u8 packet: 1;
+ __u8 blank: 1;
+ __u8 rt: 1;
+ __u8 nwa_v: 1;
+ __u8 lra_v: 1;
+ __u8 reserved3: 6;
+ __be32 track_start;
+ __be32 next_writable;
+ __be32 free_blocks;
+ __be32 fixed_packet_size;
+ __be32 track_size;
+ __be32 last_rec_address;
+} track_information;
+
+struct mode_page_header {
+ __be16 mode_data_length;
+ __u8 medium_type;
+ __u8 reserved1;
+ __u8 reserved2;
+ __u8 reserved3;
+ __be16 desc_length;
+};
+
+typedef struct {
+ int data;
+ int audio;
+ int cdi;
+ int xa;
+ long int error;
+} tracktype;
+
+struct cdrom_mechstat_header {
+ __u8 curslot: 5;
+ __u8 changer_state: 2;
+ __u8 fault: 1;
+ __u8 reserved1: 4;
+ __u8 door_open: 1;
+ __u8 mech_state: 3;
+ __u8 curlba[3];
+ __u8 nslots;
+ __u16 slot_tablelen;
+};
+
+struct cdrom_slot {
+ __u8 change: 1;
+ __u8 reserved1: 6;
+ __u8 disc_present: 1;
+ __u8 reserved2[3];
+};
+
+struct cdrom_changer_info {
+ struct cdrom_mechstat_header hdr;
+ struct cdrom_slot slots[256];
+};
+
+struct modesel_head {
+ __u8 reserved1;
+ __u8 medium;
+ __u8 reserved2;
+ __u8 block_desc_length;
+ __u8 density;
+ __u8 number_of_blocks_hi;
+ __u8 number_of_blocks_med;
+ __u8 number_of_blocks_lo;
+ __u8 reserved3;
+ __u8 block_length_hi;
+ __u8 block_length_med;
+ __u8 block_length_lo;
+};
+
+typedef struct {
+ __u16 report_key_length;
+ __u8 reserved1;
+ __u8 reserved2;
+ __u8 ucca: 3;
+ __u8 vra: 3;
+ __u8 type_code: 2;
+ __u8 region_mask;
+ __u8 rpc_scheme;
+ __u8 reserved3;
+} rpc_state_t;
+
+struct cdrom_sysctl_settings {
+ char info[1000];
+ int autoclose;
+ int autoeject;
+ int debug;
+ int lock;
+ int check;
+};
+
+enum cdrom_print_option {
+ CTL_NAME = 0,
+ CTL_SPEED = 1,
+ CTL_SLOTS = 2,
+ CTL_CAPABILITY = 3,
+};
+
+struct compat_cdrom_read_audio {
+ union cdrom_addr addr;
+ u8 addr_format;
+ compat_int_t nframes;
+ compat_caddr_t buf;
+};
+
+struct usb_qualifier_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __le16 bcdUSB;
+ __u8 bDeviceClass;
+ __u8 bDeviceSubClass;
+ __u8 bDeviceProtocol;
+ __u8 bMaxPacketSize0;
+ __u8 bNumConfigurations;
+ __u8 bRESERVED;
+};
+
+struct usb_otg_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+ __u8 bmAttributes;
+};
+
+struct usb_set_sel_req {
+ __u8 u1_sel;
+ __u8 u1_pel;
+ __le16 u2_sel;
+ __le16 u2_pel;
+};
+
+struct usbdevfs_hub_portinfo {
+ char nports;
+ char port[127];
+};
+
+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)));
+
+struct usb_tt_clear {
+ struct list_head clear_list;
+ unsigned int tt;
+ u16 devinfo;
+ struct usb_hcd *hcd;
+ struct usb_host_endpoint *ep;
+};
+
+enum hub_activation_type {
+ HUB_INIT = 0,
+ HUB_INIT2 = 1,
+ HUB_INIT3 = 2,
+ HUB_POST_RESET = 3,
+ HUB_RESUME = 4,
+ HUB_RESET_RESUME = 5,
+};
+
+enum hub_quiescing_type {
+ HUB_DISCONNECT = 0,
+ HUB_PRE_RESET = 1,
+ HUB_SUSPEND = 2,
+};
+
+struct ep_device {
+ struct usb_endpoint_descriptor *desc;
+ struct usb_device *udev;
+ struct device dev;
+};
+
+struct usb_ohci_pdata {
+ unsigned int big_endian_desc: 1;
+ unsigned int big_endian_mmio: 1;
+ unsigned int no_big_frame_no: 1;
+ unsigned int num_ports;
+ int (*power_on)(struct platform_device *);
+ void (*power_off)(struct platform_device *);
+ void (*power_suspend)(struct platform_device *);
+};
+
+struct ohci_platform_priv {
+ struct clk *clks[4];
+ struct reset_control *resets;
+};
+
+struct iu {
+ __u8 iu_id;
+ __u8 rsvd1;
+ __be16 tag;
+};
+
+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,
+};
+
+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 sense_iu {
+ __u8 iu_id;
+ __u8 rsvd1;
+ __be16 tag;
+ __be16 status_qual;
+ __u8 status;
+ __u8 rsvd7[7];
+ __be16 len;
+ __u8 sense[96];
+};
+
+struct response_iu {
+ __u8 iu_id;
+ __u8 rsvd1;
+ __be16 tag;
+ __u8 add_response_info[3];
+ __u8 response_code;
+};
+
+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;
+ u64 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;
+};
+
+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,
+};
+
+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 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;
+};
+
+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_event {
+ enum serio_event_type type;
+ void *object;
+ struct module *owner;
+ struct list_head node;
+};
+
+struct rmi_2d_axis_alignment {
+ bool swap_axes;
+ bool flip_x;
+ bool flip_y;
+ u16 clip_x_low;
+ u16 clip_y_low;
+ u16 clip_x_high;
+ u16 clip_y_high;
+ u16 offset_x;
+ u16 offset_y;
+ u8 delta_x_threshold;
+ u8 delta_y_threshold;
+};
+
+enum rmi_sensor_type {
+ rmi_sensor_default = 0,
+ rmi_sensor_touchscreen = 1,
+ rmi_sensor_touchpad = 2,
+};
+
+struct rmi_2d_sensor_platform_data {
+ struct rmi_2d_axis_alignment axis_align;
+ enum rmi_sensor_type sensor_type;
+ int x_mm;
+ int y_mm;
+ int disable_report_mask;
+ u16 rezero_wait;
+ bool topbuttonpad;
+ bool kernel_tracking;
+ int dmax;
+ int dribble;
+ int palm_detect;
+};
+
+struct rmi_gpio_data {
+ bool buttonpad;
+ bool trackstick_buttons;
+ bool disable;
+};
+
+enum rmi_reg_state {
+ RMI_REG_STATE_DEFAULT = 0,
+ RMI_REG_STATE_OFF = 1,
+ RMI_REG_STATE_ON = 2,
+};
+
+struct rmi_f01_power_management {
+ enum rmi_reg_state nosleep;
+ u8 wakeup_threshold;
+ u8 doze_holdoff;
+ u8 doze_interval;
+};
+
+struct rmi_device_platform_data_spi {
+ u32 block_delay_us;
+ u32 split_read_block_delay_us;
+ u32 read_delay_us;
+ u32 write_delay_us;
+ u32 split_read_byte_delay_us;
+ u32 pre_delay_us;
+ u32 post_delay_us;
+ u8 bits_per_word;
+ u16 mode;
+ void *cs_assert_data;
+ int (*cs_assert)(const void *, const bool);
+};
+
+struct rmi_device_platform_data {
+ int reset_delay_ms;
+ int irq;
+ struct rmi_device_platform_data_spi spi_data;
+ struct rmi_2d_sensor_platform_data sensor_pdata;
+ struct rmi_f01_power_management power_management;
+ struct rmi_gpio_data gpio_data;
+};
+
+enum synaptics_pkt_type {
+ SYN_NEWABS = 0,
+ SYN_NEWABS_STRICT = 1,
+ SYN_NEWABS_RELAXED = 2,
+ SYN_OLDABS = 3,
+};
+
+struct synaptics_hw_state {
+ int x;
+ int y;
+ int z;
+ int w;
+ unsigned int left: 1;
+ unsigned int right: 1;
+ unsigned int middle: 1;
+ unsigned int up: 1;
+ unsigned int down: 1;
+ u8 ext_buttons;
+ s8 scroll;
+};
+
+struct synaptics_device_info {
+ u32 model_id;
+ u32 firmware_id;
+ u32 board_id;
+ u32 capabilities;
+ u32 ext_cap;
+ u32 ext_cap_0c;
+ u32 ext_cap_10;
+ u32 identity;
+ u32 x_res;
+ u32 y_res;
+ u32 x_max;
+ u32 y_max;
+ u32 x_min;
+ u32 y_min;
+};
+
+struct synaptics_data {
+ struct synaptics_device_info info;
+ enum synaptics_pkt_type pkt_type;
+ u8 mode;
+ int scroll;
+ bool absolute_mode;
+ bool disable_gesture;
+ struct serio *pt_port;
+ struct synaptics_hw_state agm;
+ unsigned int agm_count;
+ long unsigned int press_start;
+ bool press;
+ bool report_press;
+ bool is_forcepad;
+};
+
+struct min_max_quirk {
+ const char * const *pnp_ids;
+ struct {
+ u32 min;
+ u32 max;
+ } board_id;
+ u32 x_min;
+ u32 x_max;
+ u32 y_min;
+ u32 y_max;
+};
+
+enum {
+ SYNAPTICS_INTERTOUCH_NOT_SET = -1,
+ SYNAPTICS_INTERTOUCH_OFF = 0,
+ SYNAPTICS_INTERTOUCH_ON = 1,
+};
+
+enum hwmon_chip_attributes {
+ hwmon_chip_temp_reset_history = 0,
+ hwmon_chip_in_reset_history = 1,
+ hwmon_chip_curr_reset_history = 2,
+ hwmon_chip_power_reset_history = 3,
+ hwmon_chip_register_tz = 4,
+ hwmon_chip_update_interval = 5,
+ hwmon_chip_alarms = 6,
+ hwmon_chip_samples = 7,
+ hwmon_chip_curr_samples = 8,
+ hwmon_chip_in_samples = 9,
+ hwmon_chip_power_samples = 10,
+ hwmon_chip_temp_samples = 11,
+ hwmon_chip_beep_enable = 12,
+ hwmon_chip_pec = 13,
+};
+
+enum hwmon_energy_attributes {
+ hwmon_energy_enable = 0,
+ hwmon_energy_input = 1,
+ hwmon_energy_label = 2,
+};
+
+enum hwmon_humidity_attributes {
+ hwmon_humidity_enable = 0,
+ hwmon_humidity_input = 1,
+ hwmon_humidity_label = 2,
+ hwmon_humidity_min = 3,
+ hwmon_humidity_min_hyst = 4,
+ hwmon_humidity_max = 5,
+ hwmon_humidity_max_hyst = 6,
+ hwmon_humidity_alarm = 7,
+ hwmon_humidity_fault = 8,
+ hwmon_humidity_rated_min = 9,
+ hwmon_humidity_rated_max = 10,
+ hwmon_humidity_min_alarm = 11,
+ hwmon_humidity_max_alarm = 12,
+};
+
+enum hwmon_pwm_attributes {
+ hwmon_pwm_input = 0,
+ hwmon_pwm_enable = 1,
+ hwmon_pwm_mode = 2,
+ hwmon_pwm_freq = 3,
+ hwmon_pwm_auto_channels_temp = 4,
+};
+
+enum hwmon_intrusion_attributes {
+ hwmon_intrusion_alarm = 0,
+ hwmon_intrusion_beep = 1,
+};
+
+struct hwmon_device {
+ const char *name;
+ const char *label;
+ struct device dev;
+ const struct hwmon_chip_info *chip;
+ struct list_head tzdata;
+ struct attribute_group group;
+ const struct attribute_group **groups;
+};
+
+struct hwmon_device_attribute {
+ struct device_attribute dev_attr;
+ const struct hwmon_ops *ops;
+ enum hwmon_sensor_types type;
+ u32 attr;
+ int index;
+ char name[32];
+};
+
+struct hwmon_thermal_data {
+ struct list_head node;
+ struct device *dev;
+ int index;
+ struct thermal_zone_device *tzd;
+};
+
+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;
+ long unsigned int status;
+};
+
+struct opp_device {
+ struct list_head node;
+ const struct device *dev;
+ struct dentry *dentry;
+};
+
+struct userspace_policy {
+ unsigned int is_managed;
+ unsigned int setspeed;
+ struct mutex mutex;
+};
+
+enum rpmb_type {
+ RPMB_TYPE_EMMC = 0,
+ RPMB_TYPE_UFS = 1,
+ RPMB_TYPE_NVME = 2,
+};
+
+struct rpmb_descr {
+ enum rpmb_type type;
+ int (*route_frames)(struct device *, u8 *, unsigned int, u8 *, unsigned int);
+ u8 *dev_id;
+ size_t dev_id_len;
+ u16 reliable_wr_count;
+ u16 capacity;
+};
+
+struct rpmb_dev {
+ struct device dev;
+ int id;
+ struct list_head list_node;
+ struct rpmb_descr descr;
+};
+
+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];
+};
+
+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_request {
+ struct mmc_request mrq;
+ struct mmc_command sbc;
+ struct mmc_command cmd;
+ struct mmc_command stop;
+ struct mmc_data data;
+};
+
+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_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;
+};
+
+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 rpmb_frame {
+ u8 stuff[196];
+ u8 key_mac[32];
+ u8 data[256];
+ u8 nonce[16];
+ __be32 write_counter;
+ __be16 addr;
+ __be16 block_count;
+ __be16 result;
+ __be16 req_resp;
+};
+
+struct mmc_blk_busy_data {
+ struct mmc_card *card;
+ u32 status;
+};
+
+struct mmc_rpmb_data {
+ struct device dev;
+ struct cdev chrdev;
+ int id;
+ unsigned int part_index;
+ struct mmc_blk_data *md;
+ struct rpmb_dev *rdev;
+ struct list_head node;
+};
+
+struct mmc_blk_ioc_data {
+ struct mmc_ioc_cmd ic;
+ unsigned char *buf;
+ u64 buf_bytes;
+ unsigned int flags;
+ struct mmc_rpmb_data *rpmb;
+};
+
+struct dmi_device_attribute {
+ struct device_attribute dev_attr;
+ int field;
+};
+
+struct mafield {
+ const char *prefix;
+ int field;
+};
+
+enum {
+ SYSTAB = 0,
+ MMBASE = 1,
+ MMSIZE = 2,
+ DCSIZE = 3,
+ DCVERS = 4,
+ PARAMCOUNT = 5,
+};
+
+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 hid_usage_entry {
+ unsigned int page;
+ unsigned int usage;
+ const char *description;
+};
+
+struct acpi_table_pcct {
+ struct acpi_table_header header;
+ u32 flags;
+ u64 reserved;
+};
+
+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_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_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 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 mbox_client {
+ struct device *dev;
+ bool tx_block;
+ long unsigned int 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 mbox_chan *mchan;
+ u64 shmem_base_addr;
+ u64 shmem_size;
+ u32 latency;
+ u32 max_access_rate;
+ u16 min_turnaround_time;
+};
+
+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;
+ u8 type;
+ unsigned int plat_irq_flags;
+ bool chan_in_use;
+};
+
+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_map_internal {
+ struct iio_dev *indio_dev;
+ struct iio_map *map;
+ struct list_head l;
+};
+
+struct nvmem_cell_lookup {
+ const char *nvmem_name;
+ const char *cell_name;
+ const char *dev_id;
+ const char *con_id;
+ struct list_head node;
+};
+
+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_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;
+};
+
+typedef struct {
+ rwlock_t *lock;
+ long unsigned int flags;
+} class_read_lock_irqsave_t;
+
+typedef struct {
+ rwlock_t *lock;
+ long unsigned int flags;
+} class_write_lock_irqsave_t;
+
+typedef struct rw_semaphore *class_rwsem_read_t;
+
+typedef struct rw_semaphore *class_rwsem_write_t;
+
+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_list {
+ unsigned int offset;
+ unsigned int space;
+ unsigned int used;
+ unsigned int count;
+ struct snd_ctl_elem_id *pids;
+ unsigned char reserved[50];
+};
+
+struct snd_ctl_tlv {
+ unsigned int numid;
+ unsigned int length;
+ unsigned int tlv[0];
+};
+
+enum sndrv_ctl_event_type {
+ SNDRV_CTL_EVENT_ELEM = 0,
+ SNDRV_CTL_EVENT_LAST = 0,
+};
+
+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_kctl_event {
+ struct list_head list;
+ struct snd_ctl_elem_id id;
+ unsigned int mask;
+};
+
+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);
+};
+
+struct snd_kctl_ioctl {
+ struct list_head list;
+ snd_kctl_ioctl_func_t fioctl;
+};
+
+enum snd_ctl_add_mode {
+ CTL_ADD_EXCLUSIVE = 0,
+ CTL_REPLACE = 1,
+ CTL_ADD_ON_REPLACE = 2,
+};
+
+struct user_element {
+ struct snd_ctl_elem_info info;
+ struct snd_card *card;
+ char *elem_data;
+ long unsigned int elem_data_size;
+ void *tlv_data;
+ long unsigned int tlv_data_size;
+ void *priv_data;
+};
+
+struct snd_ctl_elem_list32 {
+ u32 offset;
+ u32 space;
+ u32 used;
+ u32 count;
+ u32 pids;
+ unsigned char reserved[50];
+};
+
+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];
+};
+
+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,
+};
+
+struct pcm_format_data {
+ unsigned char width;
+ unsigned char phys;
+ signed char le;
+ signed char signd;
+ unsigned char silence[8];
+};
+
+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 int 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 scm_ts_pktinfo {
+ __u32 if_index;
+ __u32 pkt_length;
+ __u32 reserved[2];
+};
+
+struct used_address {
+ struct __kernel_sockaddr_storage name;
+ unsigned int name_len;
+};
+
+struct rtgenmsg {
+ unsigned char rtgen_family;
+};
+
+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 pcpu_gen_cookie {
+ local_t nesting;
+ u64 last;
+};
+
+struct gen_cookie {
+ struct pcpu_gen_cookie *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 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;
+};
+
+struct sock_diag_req {
+ __u8 sdiag_family;
+ __u8 sdiag_protocol;
+};
+
+struct broadcast_sk {
+ struct sock *sk;
+ struct work_struct work;
+};
+
+struct fib_notifier_net {
+ struct list_head fib_notifier_ops;
+ struct atomic_notifier_head fib_chain;
+};
+
+enum netdev_xdp_rx_metadata {
+ NETDEV_XDP_RX_METADATA_TIMESTAMP = 1,
+ NETDEV_XDP_RX_METADATA_HASH = 2,
+ NETDEV_XDP_RX_METADATA_VLAN_TAG = 4,
+};
+
+enum netdev_xsk_flags {
+ NETDEV_XSK_FLAGS_TX_TIMESTAMP = 1,
+ NETDEV_XSK_FLAGS_TX_CHECKSUM = 2,
+};
+
+enum netdev_qstats_scope {
+ NETDEV_QSTATS_SCOPE_QUEUE = 1,
+};
+
+struct net_devmem_dmabuf_binding {
+ struct dma_buf *dmabuf;
+ struct dma_buf_attachment *attachment;
+ struct sg_table *sgt;
+ struct net_device *dev;
+ struct gen_pool *chunk_pool;
+ refcount_t ref;
+ struct list_head list;
+ struct xarray bound_rxqs;
+ u32 id;
+};
+
+struct netdev_nl_dump_ctx {
+ long unsigned int ifindex;
+ unsigned int rxq_idx;
+ unsigned int txq_idx;
+ unsigned int napi_id;
+};
+
+enum {
+ NETDEV_A_PAGE_POOL_STATS_INFO = 1,
+ NETDEV_A_PAGE_POOL_STATS_ALLOC_FAST = 8,
+ NETDEV_A_PAGE_POOL_STATS_ALLOC_SLOW = 9,
+ NETDEV_A_PAGE_POOL_STATS_ALLOC_SLOW_HIGH_ORDER = 10,
+ NETDEV_A_PAGE_POOL_STATS_ALLOC_EMPTY = 11,
+ NETDEV_A_PAGE_POOL_STATS_ALLOC_REFILL = 12,
+ NETDEV_A_PAGE_POOL_STATS_ALLOC_WAIVE = 13,
+ NETDEV_A_PAGE_POOL_STATS_RECYCLE_CACHED = 14,
+ NETDEV_A_PAGE_POOL_STATS_RECYCLE_CACHE_FULL = 15,
+ NETDEV_A_PAGE_POOL_STATS_RECYCLE_RING = 16,
+ NETDEV_A_PAGE_POOL_STATS_RECYCLE_RING_FULL = 17,
+ NETDEV_A_PAGE_POOL_STATS_RECYCLE_RELEASED_REFCNT = 18,
+ __NETDEV_A_PAGE_POOL_STATS_MAX = 19,
+ NETDEV_A_PAGE_POOL_STATS_MAX = 18,
+};
+
+typedef int (*pp_nl_fill_cb)(struct sk_buff *, const struct page_pool *, const struct genl_info *);
+
+struct page_pool_dump_cb {
+ long unsigned int ifindex;
+ u32 pp_id;
+};
+
+struct update_classid_context {
+ u32 classid;
+ unsigned int batch;
+};
+
+struct sk_psock_link {
+ struct list_head list;
+ struct bpf_map *map;
+ void *link_raw;
+};
+
+struct bpf_stab {
+ struct bpf_map map;
+ struct sock **sks;
+ struct sk_psock_progs progs;
+ spinlock_t lock;
+};
+
+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);
+
+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 bpf_shtab_elem {
+ struct callback_head rcu;
+ u32 hash;
+ struct sock *sk;
+ struct hlist_node node;
+ u8 key[0];
+};
+
+struct bpf_shtab_bucket {
+ struct hlist_head head;
+ spinlock_t lock;
+};
+
+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;
+};
+
+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 sock_hash_seq_info {
+ struct bpf_map *map;
+ struct bpf_shtab *htab;
+ u32 bucket_id;
+};
+
+struct sockmap_link {
+ struct bpf_link link;
+ struct bpf_map *map;
+ enum bpf_attach_type attach_type;
+};
+
+struct tc_prio_qopt {
+ int bands;
+ __u8 priomap[16];
+};
+
+struct skb_array {
+ struct ptr_ring ring;
+};
+
+struct psched_ratecfg {
+ u64 rate_bytes_ps;
+ u32 mult;
+ u16 overhead;
+ u16 mpu;
+ u8 linklayer;
+ u8 shift;
+};
+
+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 **p_miniq;
+};
+
+struct pfifo_fast_priv {
+ struct skb_array q[3];
+};
+
+struct bpf_trace_run_ctx {
+ struct bpf_run_ctx run_ctx;
+ u64 bpf_cookie;
+ bool is_uprobe;
+};
+
+struct bpf_test_timer {
+ enum {
+ NO_PREEMPT = 0,
+ NO_MIGRATE = 1,
+ } mode;
+ u32 i;
+ u64 time_start;
+ u64 time_spent;
+};
+
+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 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 bpf_fentry_test_t {
+ struct bpf_fentry_test_t *a;
+};
+
+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 linkinfo_reply_data {
+ struct ethnl_reply_data base;
+ struct ethtool_link_ksettings ksettings;
+ struct ethtool_link_settings *lsettings;
+};
+
+struct channels_reply_data {
+ struct ethnl_reply_data base;
+ struct ethtool_channels channels;
+};
+
+enum {
+ ETHTOOL_A_CABLE_RESULT_UNSPEC = 0,
+ ETHTOOL_A_CABLE_RESULT_PAIR = 1,
+ ETHTOOL_A_CABLE_RESULT_CODE = 2,
+ ETHTOOL_A_CABLE_RESULT_SRC = 3,
+ __ETHTOOL_A_CABLE_RESULT_CNT = 4,
+ ETHTOOL_A_CABLE_RESULT_MAX = 3,
+};
+
+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_SRC = 3,
+ __ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 4,
+ ETHTOOL_A_CABLE_FAULT_LENGTH_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_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_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_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_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,
+};
+
+struct phc_vclocks_reply_data {
+ struct ethnl_reply_data base;
+ int num;
+ int *index;
+};
+
+struct phy_req_info {
+ struct ethnl_req_info base;
+ struct phy_device_node *pdn;
+};
+
+struct ethnl_phy_dump_ctx {
+ struct phy_req_info *phy_req_info;
+ long unsigned int ifindex;
+ long unsigned int phy_index;
+};
+
+struct nf_defrag_hook {
+ struct module *owner;
+ int (*enable)(struct net *);
+ void (*disable)(struct net *);
+};
+
+struct bpf_nf_link {
+ struct bpf_link link;
+ struct nf_hook_ops hook_ops;
+ netns_tracker ns_tracker;
+ struct net *net;
+ u32 dead;
+ const struct nf_defrag_hook *defrag_hook;
+};
+
+struct dmabuf_cmsg {
+ __u64 frag_offset;
+ __u32 frag_size;
+ __u32 frag_token;
+ __u32 dmabuf_id;
+ __u32 flags;
+};
+
+struct dmabuf_genpool_chunk_owner {
+ long unsigned int base_virtual;
+ dma_addr_t base_dma_addr;
+ struct net_iov *niovs;
+ size_t num_niovs;
+ struct net_devmem_dmabuf_binding *binding;
+};
+
+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_BOUND_INACTIVE = 13,
+ BPF_TCP_MAX_STATES = 14,
+};
+
+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_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_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;
+};
+
+enum {
+ TCP_CMSG_INQ = 1,
+ TCP_CMSG_TS = 2,
+};
+
+struct tcp_splice_state {
+ struct pipe_inode_info *pipe;
+ size_t len;
+ unsigned int flags;
+};
+
+struct tcp_xa_pool {
+ u8 max;
+ u8 idx;
+ __u32 tokens[17];
+ netmem_ref netmems[17];
+};
+
+typedef u32 inet_ehashfn_t(const struct net *, const __be32, const __u16, const __be32, const __be16);
+
+struct bpf_iter__udp {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct udp_sock *udp_sk;
+ };
+ uid_t uid;
+ long: 0;
+ 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 fib_nh_notifier_info {
+ struct fib_notifier_info info;
+ struct fib_nh *fib_nh;
+};
+
+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 *next;
+ int priority;
+};
+
+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;
+};
+
+struct gro_cell;
+
+struct gro_cells {
+ struct gro_cell *cells;
+};
+
+struct ip_tunnel_prl_entry;
+
+struct ip_tunnel {
+ struct ip_tunnel *next;
+ struct hlist_node hash_node;
+ struct net_device *dev;
+ netdevice_tracker dev_tracker;
+ struct net *net;
+ long unsigned int 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_kern parms;
+ int mlink;
+ int encap_hlen;
+ int hlen;
+ struct ip_tunnel_encap encap;
+ struct ip_tunnel_prl_entry *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 __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;
+ long unsigned int i_flags[1];
+ long unsigned int o_flags[1];
+ __be32 i_key;
+ __be32 o_key;
+ __u32 fwmark;
+ __u32 index;
+ __u8 erspan_ver;
+ __u8 dir;
+ __u16 hwid;
+};
+
+struct ip6_tnl {
+ struct ip6_tnl *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;
+ long unsigned int 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 ip_tunnel_prl_entry {
+ struct ip_tunnel_prl_entry *next;
+ __be32 addr;
+ u16 flags;
+ struct callback_head callback_head;
+};
+
+struct xfrm_trans_tasklet {
+ struct work_struct work;
+ spinlock_t queue_lock;
+ struct sk_buff_head queue;
+};
+
+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 nat_keepalive {
+ struct net *net;
+ u16 family;
+ xfrm_address_t saddr;
+ xfrm_address_t daddr;
+ __be16 encap_sport;
+ __be16 encap_dport;
+ __u32 smark;
+};
+
+struct nat_keepalive_work_ctx {
+ time64_t next_run;
+ time64_t now;
+};
+
+struct ipv6_mreq {
+ struct in6_addr ipv6mr_multiaddr;
+ int ipv6mr_ifindex;
+};
+
+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 group_req {
+ __u32 gr_interface;
+ struct __kernel_sockaddr_storage gr_group;
+};
+
+struct group_source_req {
+ __u32 gsr_interface;
+ struct __kernel_sockaddr_storage gsr_group;
+ struct __kernel_sockaddr_storage gsr_source;
+};
+
+struct compat_group_req {
+ __u32 gr_interface;
+ struct __kernel_sockaddr_storage gr_group;
+} __attribute__((packed));
+
+struct compat_group_source_req {
+ __u32 gsr_interface;
+ struct __kernel_sockaddr_storage gsr_group;
+ struct __kernel_sockaddr_storage gsr_source;
+} __attribute__((packed));
+
+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));
+ };
+};
+
+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 ip6fl_iter_state {
+ struct seq_net_private p;
+ struct pid_namespace *pid_ns;
+ int bucket;
+};
+
+enum tunnel_encap_types {
+ TUNNEL_ENCAP_NONE = 0,
+ TUNNEL_ENCAP_FOU = 1,
+ TUNNEL_ENCAP_GUE = 2,
+ TUNNEL_ENCAP_MPLS = 3,
+};
+
+struct ip_tunnel_prl {
+ __be32 addr;
+ __u16 flags;
+ __u16 __reserved;
+ __u32 datalen;
+ __u32 __reserved2;
+};
+
+struct tnl_ptk_info {
+ long unsigned int flags[1];
+ __be16 proto;
+ __be32 key;
+ __be32 seq;
+ int hdr_len;
+};
+
+struct sit_net {
+ struct ip_tunnel *tunnels_r_l[16];
+ struct ip_tunnel *tunnels_r[16];
+ struct ip_tunnel *tunnels_l[16];
+ struct ip_tunnel *tunnels_wc[1];
+ struct ip_tunnel **tunnels[4];
+ struct net_device *fb_tunnel_dev;
+};
+
+struct rpc_cred_cache {
+ struct hlist_head *hashtable;
+ unsigned int hashbits;
+ spinlock_t lock;
+};
+
+enum p9_req_status_t {
+ REQ_STATUS_ALLOC = 0,
+ REQ_STATUS_UNSENT = 1,
+ REQ_STATUS_SENT = 2,
+ REQ_STATUS_RCVD = 3,
+ REQ_STATUS_FLSHD = 4,
+ REQ_STATUS_ERROR = 5,
+};
+
+struct p9_fd_opts {
+ int rfd;
+ int wfd;
+ u16 port;
+ bool privport;
+};
+
+enum {
+ Opt_port___2 = 0,
+ Opt_rfdno = 1,
+ Opt_wfdno = 2,
+ Opt_err___4 = 3,
+ Opt_privport = 4,
+};
+
+enum {
+ Rworksched = 1,
+ Rpending = 2,
+ Wworksched = 4,
+ Wpending = 8,
+};
+
+struct p9_conn;
+
+struct p9_poll_wait {
+ struct p9_conn *conn;
+ wait_queue_entry_t wait;
+ wait_queue_head_t *wait_addr;
+};
+
+struct p9_conn {
+ struct list_head mux_list;
+ struct p9_client *client;
+ int err;
+ spinlock_t req_lock;
+ struct list_head req_list;
+ struct list_head unsent_req_list;
+ struct p9_req_t *rreq;
+ struct p9_req_t *wreq;
+ char tmp_buf[7];
+ struct p9_fcall rc;
+ int wpos;
+ int wsize;
+ char *wbuf;
+ struct list_head poll_pending_link;
+ struct p9_poll_wait poll_wait[2];
+ poll_table pt;
+ struct work_struct rq;
+ struct work_struct wq;
+ long unsigned int wsched;
+};
+
+struct p9_trans_fd {
+ struct file *rd;
+ struct file *wr;
+ struct p9_conn conn;
+};
+
+enum {
+ TLS_ALERT_DESC_CLOSE_NOTIFY = 0,
+ TLS_ALERT_DESC_UNEXPECTED_MESSAGE = 10,
+ TLS_ALERT_DESC_BAD_RECORD_MAC = 20,
+ TLS_ALERT_DESC_RECORD_OVERFLOW = 22,
+ TLS_ALERT_DESC_HANDSHAKE_FAILURE = 40,
+ TLS_ALERT_DESC_BAD_CERTIFICATE = 42,
+ TLS_ALERT_DESC_UNSUPPORTED_CERTIFICATE = 43,
+ TLS_ALERT_DESC_CERTIFICATE_REVOKED = 44,
+ TLS_ALERT_DESC_CERTIFICATE_EXPIRED = 45,
+ TLS_ALERT_DESC_CERTIFICATE_UNKNOWN = 46,
+ TLS_ALERT_DESC_ILLEGAL_PARAMETER = 47,
+ TLS_ALERT_DESC_UNKNOWN_CA = 48,
+ TLS_ALERT_DESC_ACCESS_DENIED = 49,
+ TLS_ALERT_DESC_DECODE_ERROR = 50,
+ TLS_ALERT_DESC_DECRYPT_ERROR = 51,
+ TLS_ALERT_DESC_TOO_MANY_CIDS_REQUESTED = 52,
+ TLS_ALERT_DESC_PROTOCOL_VERSION = 70,
+ TLS_ALERT_DESC_INSUFFICIENT_SECURITY = 71,
+ TLS_ALERT_DESC_INTERNAL_ERROR = 80,
+ TLS_ALERT_DESC_INAPPROPRIATE_FALLBACK = 86,
+ TLS_ALERT_DESC_USER_CANCELED = 90,
+ TLS_ALERT_DESC_MISSING_EXTENSION = 109,
+ TLS_ALERT_DESC_UNSUPPORTED_EXTENSION = 110,
+ TLS_ALERT_DESC_UNRECOGNIZED_NAME = 112,
+ TLS_ALERT_DESC_BAD_CERTIFICATE_STATUS_RESPONSE = 113,
+ TLS_ALERT_DESC_UNKNOWN_PSK_IDENTITY = 115,
+ TLS_ALERT_DESC_CERTIFICATE_REQUIRED = 116,
+ TLS_ALERT_DESC_NO_APPLICATION_PROTOCOL = 120,
+};
+
+enum handshake_msg_type {
+ HANDSHAKE_MSG_TYPE_UNSPEC = 0,
+ HANDSHAKE_MSG_TYPE_CLIENTHELLO = 1,
+ HANDSHAKE_MSG_TYPE_SERVERHELLO = 2,
+};
+
+enum handshake_auth {
+ HANDSHAKE_AUTH_UNSPEC = 0,
+ HANDSHAKE_AUTH_UNAUTH = 1,
+ HANDSHAKE_AUTH_PSK = 2,
+ HANDSHAKE_AUTH_X509 = 3,
+};
+
+enum {
+ HANDSHAKE_A_X509_CERT = 1,
+ HANDSHAKE_A_X509_PRIVKEY = 2,
+ __HANDSHAKE_A_X509_MAX = 3,
+ HANDSHAKE_A_X509_MAX = 2,
+};
+
+struct tls_handshake_req {
+ void (*th_consumer_done)(void *, int, key_serial_t);
+ void *th_consumer_data;
+ int th_type;
+ unsigned int th_timeout_ms;
+ int th_auth_mode;
+ const char *th_peername;
+ key_serial_t th_keyring;
+ key_serial_t th_certificate;
+ key_serial_t th_privkey;
+ unsigned int th_num_peerids;
+ key_serial_t th_peerid[5];
+};
+
+struct riscv_efi_boot_protocol {
+ u64 revision;
+ efi_status_t (*get_boot_hartid)(struct riscv_efi_boot_protocol *, long unsigned int *);
+};
+
+typedef void (*jump_kernel_func)(long unsigned int, long unsigned int);
+
+struct hash {
+ int ino;
+ int minor;
+ int major;
+ umode_t mode;
+ struct hash *next;
+ char name[4098];
+};
+
+struct dir_entry {
+ struct list_head list;
+ time64_t mtime;
+ char name[0];
+};
+
+enum state {
+ Start = 0,
+ Collect = 1,
+ GotHeader = 2,
+ SkipIt = 3,
+ GotName = 4,
+ CopyFile = 5,
+ GotSymlink = 6,
+ Reset = 7,
+};
+
+struct riscv_hwprobe {
+ __s64 key;
+ __u64 value;
+};
+
+struct sbi_hart_boot_data {
+ void *task_ptr;
+ void *stack_ptr;
+};
+
+enum sbi_hsm_hart_state {
+ SBI_HSM_STATE_STARTED = 0,
+ SBI_HSM_STATE_STOPPED = 1,
+ SBI_HSM_STATE_START_PENDING = 2,
+ SBI_HSM_STATE_STOP_PENDING = 3,
+ SBI_HSM_STATE_SUSPENDED = 4,
+ SBI_HSM_STATE_SUSPEND_PENDING = 5,
+ SBI_HSM_STATE_RESUME_PENDING = 6,
+};
+
+struct compat_sigcontext {
+ struct compat_user_regs_struct sc_regs;
+ union __riscv_fp_state sc_fpregs;
+};
+
+struct compat_ucontext {
+ compat_ulong_t uc_flags;
+ struct compat_ucontext *uc_link;
+ compat_stack_t uc_stack;
+ sigset_t uc_sigmask;
+ __u8 __unused[120];
+ struct compat_sigcontext uc_mcontext;
+};
+
+struct compat_rt_sigframe {
+ struct compat_siginfo info;
+ struct compat_ucontext uc;
+};
+
+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 vm_stack {
+ struct callback_head rcu;
+ struct vm_struct *stack_vm_area;
+};
+
+struct preempt_notifier;
+
+struct preempt_ops {
+ void (*sched_in)(struct preempt_notifier *, int);
+ void (*sched_out)(struct preempt_notifier *, struct task_struct *);
+};
+
+struct preempt_notifier {
+ struct hlist_node link;
+ struct preempt_ops *ops;
+};
+
+typedef struct {
+ void *lock;
+} class_preempt_t;
+
+typedef struct {
+ void *lock;
+} class_cpus_read_lock_t;
+
+typedef struct {
+ struct rq *lock;
+ struct rq_flags rf;
+} class_rq_lock_irq_t;
+
+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 cfs_schedulable_data {
+ struct task_group *tg;
+ u64 period;
+ u64 quota;
+};
+
+enum {
+ cpuset = 0,
+ possible = 1,
+ fail = 2,
+};
+
+union cpumask_rcuhead {
+ cpumask_t cpumask;
+ struct callback_head rcu;
+};
+
+struct prb_data_block {
+ long unsigned int id;
+ char data[0];
+};
+
+enum {
+ IRQC_IS_HARDIRQ = 0,
+ IRQC_IS_NESTED = 1,
+};
+
+enum {
+ IRQTF_RUNTHREAD = 0,
+ IRQTF_WARNED = 1,
+ IRQTF_AFFINITY = 2,
+ IRQTF_FORCED_THREAD = 3,
+ IRQTF_READY = 4,
+};
+
+typedef struct sigevent sigevent_t;
+
+struct call_function_data {
+ call_single_data_t *csd;
+ cpumask_var_t cpumask;
+ cpumask_var_t cpumask_ipi;
+};
+
+struct smp_call_on_cpu_struct {
+ struct work_struct work;
+ struct completion done;
+ int (*func)(void *);
+ void *data;
+ int ret;
+ int cpu;
+};
+
+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 idmap_key {
+ bool map_up;
+ u32 id;
+ u32 count;
+};
+
+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_node {
+ struct list_head list;
+ struct audit_tree *owner;
+ unsigned int index;
+};
+
+struct audit_chunk {
+ struct list_head hash;
+ long unsigned int 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_mark {
+ struct fsnotify_mark mark;
+ struct audit_chunk *chunk;
+};
+
+enum {
+ HASH_SIZE = 128,
+};
+
+struct rnd_state {
+ __u32 s1;
+ __u32 s2;
+ __u32 s3;
+ __u32 s4;
+};
+
+enum bpf_text_poke_type {
+ BPF_MOD_CALL = 0,
+ BPF_MOD_JUMP = 1,
+};
+
+enum page_size_enum {
+ __PAGE_SIZE = 4096,
+};
+
+struct bpf_prog_dummy {
+ struct bpf_prog prog;
+};
+
+typedef u64 (*btf_bpf_user_rnd_u32)();
+
+typedef u64 (*btf_bpf_get_raw_cpu_id)();
+
+struct bpf_iter_seq_prog_info {
+ u32 prog_id;
+};
+
+struct bpf_iter__bpf_prog {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct bpf_prog *prog;
+ };
+};
+
+struct bpf_bloom_filter {
+ struct bpf_map map;
+ u32 bitset_mask;
+ u32 hash_seed;
+ u32 nr_hash_funcs;
+ long unsigned int bitset[0];
+};
+
+struct bpf_cpumap_val {
+ __u32 qsize;
+ union {
+ int fd;
+ __u32 id;
+ } bpf_prog;
+};
+
+struct xdp_cpumap_stats {
+ unsigned int redirect;
+ unsigned int pass;
+ unsigned int drop;
+};
+
+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_cpu_map_entry {
+ u32 cpu;
+ int map_id;
+ struct xdp_bulk_queue *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 bpf_cpu_map {
+ struct bpf_map map;
+ struct bpf_cpu_map_entry **cpu_map;
+};
+
+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 perf_event_header {
+ __u32 type;
+ __u16 misc;
+ __u16 size;
+};
+
+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,
+};
+
+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 int watermark;
+ long int aux_watermark;
+ spinlock_t event_lock;
+ struct list_head event_list;
+ atomic_t mmap_count;
+ long unsigned int mmap_locked;
+ struct user_struct *mmap_user;
+ struct mutex aux_mutex;
+ long int aux_head;
+ unsigned int aux_nest;
+ long int aux_wakeup;
+ long unsigned int aux_pgoff;
+ int aux_nr_pages;
+ int aux_overwrite;
+ atomic_t aux_mmap_count;
+ long unsigned int 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 mlock_fbatch {
+ local_lock_t lock;
+ struct folio_batch fbatch;
+};
+
+typedef int folio_walk_flags_t;
+
+enum folio_walk_level {
+ FW_LEVEL_PTE = 0,
+ FW_LEVEL_PMD = 1,
+ FW_LEVEL_PUD = 2,
+};
+
+struct folio_walk {
+ struct page *page;
+ enum folio_walk_level level;
+ union {
+ pte_t *ptep;
+ pud_t *pudp;
+ pmd_t *pmdp;
+ };
+ union {
+ pte_t pte;
+ pud_t pud;
+ pmd_t pmd;
+ };
+ struct vm_area_struct *vma;
+ spinlock_t *ptl;
+};
+
+struct reserve_mem_table {
+ char name[16];
+ phys_addr_t start;
+ phys_addr_t size;
+};
+
+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 swap_cgroup_ctrl {
+ struct page **map;
+ long unsigned int length;
+ spinlock_t lock;
+};
+
+struct swap_cgroup {
+ short unsigned int id;
+};
+
+struct shared_policy {};
+
+struct shmem_inode_info {
+ spinlock_t lock;
+ unsigned int seals;
+ long unsigned int flags;
+ long unsigned int alloced;
+ long unsigned int swapped;
+ union {
+ struct offset_ctx dir_offsets;
+ struct {
+ struct list_head shrinklist;
+ struct list_head swaplist;
+ };
+ };
+ struct timespec64 i_crtime;
+ struct shared_policy policy;
+ struct simple_xattrs xattrs;
+ long unsigned int fallocend;
+ unsigned int fsflags;
+ atomic_t stop_eviction;
+ struct inode vfs_inode;
+};
+
+struct stat {
+ long unsigned int st_dev;
+ long unsigned int st_ino;
+ unsigned int st_mode;
+ unsigned int st_nlink;
+ unsigned int st_uid;
+ unsigned int st_gid;
+ long unsigned int st_rdev;
+ long unsigned int __pad1;
+ long int st_size;
+ int st_blksize;
+ int __pad2;
+ long int st_blocks;
+ long int st_atime;
+ long unsigned int st_atime_nsec;
+ long int st_mtime;
+ long unsigned int st_mtime_nsec;
+ long int st_ctime;
+ long unsigned int st_ctime_nsec;
+ unsigned int __unused4;
+ unsigned int __unused5;
+};
+
+typedef struct fd class_fd_raw_t;
+
+typedef struct {
+ long unsigned int fds_bits[16];
+} __kernel_fd_set;
+
+typedef __kernel_fd_set fd_set;
+
+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];
+};
+
+enum poll_time_type {
+ PT_TIMEVAL = 0,
+ PT_OLD_TIMEVAL = 1,
+ PT_TIMESPEC = 2,
+ PT_OLD_TIMESPEC = 3,
+};
+
+typedef struct {
+ long unsigned int *in;
+ long unsigned int *out;
+ long unsigned int *ex;
+ long unsigned int *res_in;
+ long unsigned int *res_out;
+ long unsigned int *res_ex;
+} fd_set_bits;
+
+struct sigset_argpack {
+ sigset_t *p;
+ size_t size;
+};
+
+struct poll_list {
+ struct poll_list *next;
+ unsigned 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;
+};
+
+struct compat_sigset_argpack {
+ compat_uptr_t p;
+ compat_size_t size;
+};
+
+struct simple_transaction_argresp {
+ ssize_t size;
+ char data[0];
+};
+
+enum {
+ DIR_OFFSET_MIN = 2,
+};
+
+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;
+};
+
+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;
+};
+
+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;
+ long unsigned int 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;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct inotify_event {
+ __s32 wd;
+ __u32 mask;
+ __u32 cookie;
+ __u32 len;
+ char name[0];
+};
+
+struct backing_file_ctx {
+ const struct cred *cred;
+ struct file *user_file;
+ void (*accessed)(struct file *);
+ void (*end_write)(struct file *, loff_t, ssize_t);
+};
+
+struct backing_aio {
+ struct kiocb iocb;
+ refcount_t ref;
+ struct kiocb *orig_iocb;
+ void (*end_write)(struct file *, loff_t, ssize_t);
+ struct work_struct work;
+ long int res;
+};
+
+struct nfs_ssc_client_ops_tbl {
+ const struct nfs4_ssc_client_ops *ssc_nfs4_ops;
+ const struct nfs_ssc_client_ops *ssc_nfs_ops;
+};
+
+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 ext4_system_zone {
+ struct rb_node node;
+ ext4_fsblk_t start_blk;
+ unsigned int count;
+ u32 ino;
+};
+
+typedef u64 compat_u64;
+
+struct fsuuid {
+ __u32 fsu_len;
+ __u32 fsu_flags;
+ __u8 fsu_uuid[0];
+};
+
+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 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 fsmap {
+ __u32 fmr_device;
+ __u32 fmr_flags;
+ __u64 fmr_physical;
+ __u64 fmr_owner;
+ __u64 fmr_offset;
+ __u64 fmr_length;
+ __u64 fmr_reserved[3];
+};
+
+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 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;
+};
+
+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];
+};
+
+typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
+
+typedef void ext4_update_sb_callback(struct ext4_super_block *, const void *);
+
+struct getfsmap_info {
+ struct super_block *gi_sb;
+ struct fsmap_head *gi_data;
+ unsigned int gi_idx;
+ __u32 gi_last_flags;
+};
+
+struct dax_holder_operations {
+ int (*notify_failure)(struct dax_device *, u64, u64, int);
+};
+
+struct ext4_lazy_init {
+ long unsigned int li_state;
+ struct list_head li_request_list;
+ struct mutex li_list_mtx;
+};
+
+struct ext4_journal_cb_entry {
+ struct list_head jce_list;
+ void (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);
+};
+
+struct ext4_err_translation {
+ int code;
+ int errno;
+};
+
+enum {
+ Opt_bsd_df = 0,
+ Opt_minix_df = 1,
+ Opt_grpid = 2,
+ Opt_nogrpid = 3,
+ Opt_resgid = 4,
+ Opt_resuid = 5,
+ Opt_sb___2 = 6,
+ Opt_nouid32 = 7,
+ Opt_debug___3 = 8,
+ Opt_removed = 9,
+ Opt_user_xattr = 10,
+ Opt_acl___2 = 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 = 32,
+ Opt_noquota = 33,
+ Opt_barrier = 34,
+ Opt_nobarrier = 35,
+ Opt_err___5 = 36,
+ Opt_usrquota = 37,
+ Opt_grpquota = 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___2 = 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___2 = 67,
+ Opt_data = 68,
+ Opt_data_err = 69,
+ Opt_jqfmt = 70,
+ Opt_dax_type = 71,
+};
+
+struct mount_opts {
+ int token;
+ int mount_opt;
+ int flags;
+};
+
+struct ext4_fs_context {
+ char *s_qf_names[3];
+ struct fscrypt_dummy_policy dummy_enc_policy;
+ int s_jquota_fmt;
+ short unsigned int qname_spec;
+ long unsigned int vals_s_flags;
+ long unsigned int mask_s_flags;
+ long unsigned int journal_devnum;
+ long unsigned int s_commit_interval;
+ long unsigned int 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 {
+ long unsigned int s_mount_opt;
+ long unsigned int s_mount_opt2;
+ kuid_t s_resuid;
+ kgid_t s_resgid;
+ long unsigned int s_commit_interval;
+ u32 s_min_batch_time;
+ u32 s_max_batch_time;
+};
+
+struct compat_dirent {
+ u32 d_ino;
+ compat_off_t d_off;
+ u16 d_reclen;
+ char d_name[256];
+};
+
+struct __fat_dirent {
+ long int d_ino;
+ __kernel_off_t d_off;
+ short unsigned int d_reclen;
+ char d_name[256];
+};
+
+enum {
+ PARSE_INVALID = 1,
+ PARSE_NOT_LONGNAME = 2,
+ PARSE_EOF = 3,
+};
+
+struct fat_ioctl_filldir_callback {
+ struct dir_context ctx;
+ void *dirent;
+ int result;
+ const char *longname;
+ int long_len;
+ const char *shortname;
+ int short_len;
+};
+
+enum pnfs_update_layout_reason {
+ PNFS_UPDATE_LAYOUT_UNKNOWN = 0,
+ PNFS_UPDATE_LAYOUT_NO_PNFS = 1,
+ PNFS_UPDATE_LAYOUT_RD_ZEROLEN = 2,
+ PNFS_UPDATE_LAYOUT_MDSTHRESH = 3,
+ PNFS_UPDATE_LAYOUT_NOMEM = 4,
+ PNFS_UPDATE_LAYOUT_BULK_RECALL = 5,
+ PNFS_UPDATE_LAYOUT_IO_TEST_FAIL = 6,
+ PNFS_UPDATE_LAYOUT_FOUND_CACHED = 7,
+ PNFS_UPDATE_LAYOUT_RETURN = 8,
+ PNFS_UPDATE_LAYOUT_RETRY = 9,
+ PNFS_UPDATE_LAYOUT_BLOCKED = 10,
+ PNFS_UPDATE_LAYOUT_INVALID_OPEN = 11,
+ PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET = 12,
+ PNFS_UPDATE_LAYOUT_EXIT = 13,
+};
+
+struct getdents_callback___2 {
+ struct dir_context ctx;
+ char *name;
+ u64 ino;
+ int found;
+ int sequence;
+};
+
+struct dotl_openflag_map {
+ int open_flag;
+ int dotl_flag;
+};
+
+struct dotl_iattr_map {
+ int iattr_valid;
+ int p9_iattr_valid;
+};
+
+struct debugfs_u32_array {
+ u32 *array;
+ u32 n_elements;
+};
+
+struct debugfs_devm_entry {
+ int (*read)(struct seq_file *, void *);
+ struct device *dev;
+};
+
+struct mqueue_fs_context {
+ struct ipc_namespace *ipc_ns;
+ bool newns;
+};
+
+struct posix_msg_tree_node {
+ struct rb_node rb_node;
+ struct list_head msg_list;
+ int priority;
+};
+
+struct ext_wait_queue {
+ struct task_struct *task;
+ struct list_head list;
+ struct msg_msg *msg;
+ int state;
+};
+
+struct mqueue_inode_info {
+ spinlock_t lock;
+ struct inode vfs_inode;
+ wait_queue_head_t wait_q;
+ struct rb_root msg_tree;
+ struct rb_node *msg_tree_rightmost;
+ struct posix_msg_tree_node *node_cache;
+ struct mq_attr attr;
+ struct sigevent notify;
+ struct pid *notify_owner;
+ u32 notify_self_exec_id;
+ struct user_namespace *notify_user_ns;
+ struct ucounts *ucounts;
+ struct sock *notify_sock;
+ struct sk_buff *notify_cookie;
+ struct ext_wait_queue e_wait_q[2];
+ long unsigned int qsize;
+};
+
+struct compat_mq_attr {
+ compat_long_t mq_flags;
+ compat_long_t mq_maxmsg;
+ compat_long_t mq_msgsize;
+ compat_long_t mq_curmsgs;
+ compat_long_t __reserved[4];
+};
+
+struct extended_perms_decision {
+ u8 used;
+ u8 driver;
+ struct extended_perms_data *allowed;
+ struct extended_perms_data *auditallow;
+ struct extended_perms_data *dontaudit;
+};
+
+struct extended_perms {
+ u16 len;
+ struct extended_perms_data drivers;
+};
+
+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_xperms_node {
+ struct extended_perms xp;
+ struct list_head xpd_head;
+};
+
+struct avc_node {
+ struct avc_entry ae;
+ struct hlist_node list;
+ struct callback_head rhead;
+};
+
+struct avc_xperms_decision_node {
+ struct extended_perms_decision xpd;
+ struct list_head xpd_list;
+};
+
+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 avc_callback_node {
+ int (*callback)(u32);
+ u32 events;
+ struct avc_callback_node *next;
+};
+
+struct selinux_avc {
+ unsigned int avc_cache_threshold;
+ struct avc_cache avc_cache;
+};
+
+struct selinux_kernel_status {
+ u32 version;
+ u32 sequence;
+ u32 enforcing;
+ u32 policyload;
+ u32 deny_unknown;
+};
+
+struct cond_insertf_data {
+ struct policydb *p;
+ struct avtab_node **dst;
+ struct cond_av_list *other;
+};
+
+struct akcipher_instance {
+ void (*free)(struct akcipher_instance *);
+ union {
+ struct {
+ char head[72];
+ struct crypto_instance base;
+ } s;
+ struct akcipher_alg alg;
+ };
+};
+
+struct crypto_akcipher_spawn {
+ struct crypto_spawn base;
+};
+
+struct chksum_ctx {
+ u32 key;
+};
+
+struct chksum_desc_ctx {
+ u32 crc;
+};
+
+enum blk_integrity_flags {
+ BLK_INTEGRITY_NOVERIFY = 1,
+ BLK_INTEGRITY_NOGENERATE = 2,
+ BLK_INTEGRITY_DEVICE_CAPABLE = 4,
+ BLK_INTEGRITY_REF_TAG = 8,
+ BLK_INTEGRITY_STACKED = 16,
+};
+
+struct mq_inflight {
+ struct block_device *part;
+ unsigned int inflight[2];
+};
+
+struct blk_rq_wait {
+ struct completion done;
+ blk_status_t ret;
+};
+
+struct blk_expired_data {
+ bool has_timedout_rq;
+ long unsigned int next;
+ long unsigned int timeout_start;
+};
+
+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;
+};
+
+enum prep_dispatch {
+ PREP_DISPATCH_OK = 0,
+ PREP_DISPATCH_NO_TAG = 1,
+ PREP_DISPATCH_NO_BUDGET = 2,
+};
+
+struct rq_iter_data {
+ struct blk_mq_hw_ctx *hctx;
+ bool has_rq;
+};
+
+struct blk_mq_qe_pair {
+ struct list_head node;
+ struct request_queue *q;
+ struct elevator_type *type;
+};
+
+struct uuidcmp {
+ const char *uuid;
+ int len;
+};
+
+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,
+};
+
+struct io_xattr {
+ struct file *file;
+ struct xattr_ctx ctx;
+ struct filename *filename;
+};
+
+struct io_sync {
+ struct file *file;
+ loff_t len;
+ loff_t off;
+ int flags;
+ int mode;
+};
+
+struct waitid_info {
+ pid_t pid;
+ uid_t uid;
+ int status;
+ int cause;
+};
+
+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 io_waitid_async {
+ struct io_kiocb *req;
+ struct wait_opts wo;
+};
+
+struct io_waitid {
+ struct file *file;
+ int which;
+ pid_t upid;
+ int options;
+ atomic_t refs;
+ struct wait_queue_head *head;
+ struct siginfo *infop;
+ struct waitid_info info;
+};
+
+struct sg_append_table {
+ struct sg_table sgt;
+ struct scatterlist *prv;
+ unsigned int total_nents;
+};
+
+struct once_work {
+ struct work_struct work;
+ struct static_key_true *key;
+ struct module *module;
+};
+
+struct reciprocal_value_adv {
+ u32 m;
+ u8 sh;
+ u8 exp;
+ bool is_wide_m;
+};
+
+enum devm_ioremap_type {
+ DEVM_IOREMAP = 0,
+ DEVM_IOREMAP_UC = 1,
+ DEVM_IOREMAP_WC = 2,
+ DEVM_IOREMAP_NP = 3,
+};
+
+struct arch_io_reserve_memtype_wc_devres {
+ resource_size_t start;
+ resource_size_t size;
+};
+
+struct gen_pool_chunk {
+ struct list_head next_chunk;
+ atomic_long_t avail;
+ phys_addr_t phys_addr;
+ void *owner;
+ long unsigned int start_addr;
+ long unsigned int end_addr;
+ long unsigned int bits[0];
+};
+
+struct genpool_data_align {
+ int align;
+};
+
+struct genpool_data_fixed {
+ long unsigned int offset;
+};
+
+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;
+
+struct xz_dec_bcj {
+ enum {
+ BCJ_X86 = 4,
+ BCJ_POWERPC = 5,
+ BCJ_IA64 = 6,
+ BCJ_ARM = 7,
+ BCJ_ARMTHUMB = 8,
+ BCJ_SPARC = 9,
+ BCJ_ARM64 = 10,
+ BCJ_RISCV = 11,
+ } 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 aplic_direct {
+ struct aplic_priv priv;
+ struct irq_domain *irqdomain;
+ struct cpumask lmask;
+};
+
+struct aplic_idc {
+ unsigned int hart_index;
+ void *regs;
+ struct aplic_direct *direct;
+};
+
+struct phy_provider {
+ struct device *dev;
+ struct device_node *children;
+ struct module *owner;
+ struct list_head list;
+ struct phy * (*of_xlate)(struct device *, const struct of_phandle_args *);
+};
+
+struct phy_lookup {
+ struct list_head node;
+ const char *dev_id;
+ const char *con_id;
+ struct phy *phy;
+};
+
+enum CV1812H_POWER_DOMAIN {
+ VDD18A_EPHY___2 = 0,
+ VDD18A_MIPI___3 = 1,
+ VDDIO18_1___2 = 2,
+ VDDIO_EMMC___2 = 3,
+ VDDIO_RTC___4 = 4,
+ VDDIO_SD0___2 = 5,
+ VDDIO_SD1___3 = 6,
+ VDDIO_VIVO___2 = 7,
+};
+
+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;
+};
+
+struct pci_bus_resource {
+ struct list_head list;
+ struct resource *res;
+ unsigned int flags;
+};
+
+struct pci_dynid {
+ struct list_head node;
+ struct pci_device_id id;
+};
+
+struct drv_dev_and_id {
+ struct pci_driver *drv;
+ struct pci_dev *dev;
+ const struct pci_device_id *id;
+};
+
+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_dev_match_info {
+ struct acpi_device_id hid[2];
+ const char *uid;
+ s64 hrv;
+};
+
+struct acpi_dev_walk_context {
+ int (*fn)(struct acpi_device *, void *);
+ void *data;
+};
+
+struct acpi_table_madt {
+ struct acpi_table_header header;
+ u32 address;
+ u32 flags;
+};
+
+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 acpi_power_dependent_device {
+ struct device *dev;
+ struct list_head node;
+};
+
+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_resource_entry {
+ struct list_head node;
+ struct acpi_power_resource *resource;
+};
+
+struct acpi_mem_mapping {
+ acpi_physical_address physical_address;
+ u8 *logical_address;
+ acpi_size length;
+ struct acpi_mem_mapping *next_mm;
+};
+
+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_data_table_mapping {
+ void *pointer;
+};
+
+struct acpi_port_info {
+ char *name;
+ u16 start;
+ u16 end;
+ u8 osi_dependency;
+};
+
+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_pcct_shared_memory {
+ u32 signature;
+ u16 command;
+ u16 status;
+};
+
+struct cpc_reg {
+ u8 descriptor;
+ u16 length;
+ u8 space_id;
+ u8 bit_width;
+ u8 bit_offset;
+ u8 access_width;
+ u64 address;
+} __attribute__((packed));
+
+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;
+ raw_spinlock_t rmw_lock;
+ 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 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 clk_lookup {
+ struct list_head node;
+ const char *dev_id;
+ const char *con_id;
+ struct clk *clk;
+ struct clk_hw *clk_hw;
+};
+
+struct clk_lookup_alloc {
+ struct clk_lookup cl;
+ char dev_id[24];
+ char con_id[16];
+};
+
+struct clk_multiplier {
+ struct clk_hw hw;
+ void *reg;
+ u8 shift;
+ u8 width;
+ u8 flags;
+ spinlock_t *lock;
+};
+
+struct u32_fract {
+ __u32 numerator;
+ __u32 denominator;
+};
+
+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 *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
+ spinlock_t *lock;
+};
+
+struct mpfs_clock_data {
+ struct device *dev;
+ void *base;
+ void *msspll_base;
+ struct clk_hw_onecell_data hw_data;
+};
+
+struct mpfs_msspll_hw_clock {
+ void *base;
+ struct clk_hw hw;
+ struct clk_init_data init;
+ unsigned int id;
+ u32 reg_offset;
+ u32 shift;
+ u32 width;
+ u32 flags;
+};
+
+struct mpfs_msspll_out_hw_clock {
+ void *base;
+ struct clk_divider output;
+ struct clk_init_data init;
+ unsigned int id;
+ u32 reg_offset;
+};
+
+struct mpfs_cfg_hw_clock {
+ struct clk_divider cfg;
+ struct clk_init_data init;
+ unsigned int id;
+ u32 reg_offset;
+};
+
+struct mpfs_periph_hw_clock {
+ struct clk_gate periph;
+ unsigned int id;
+};
+
+struct sg2042_rpgate_clock {
+ struct clk_hw hw;
+ unsigned int id;
+ u32 offset_enable;
+ u8 bit_idx;
+};
+
+struct ccu_nk {
+ u16 reg;
+ u32 enable;
+ u32 lock;
+ struct ccu_mult_internal n;
+ struct ccu_mult_internal k;
+ unsigned int fixed_post_div;
+ struct ccu_common common;
+};
+
+struct _ccu_nk {
+ long unsigned int n;
+ long unsigned int min_n;
+ long unsigned int max_n;
+ long unsigned int k;
+ long unsigned int min_k;
+ long unsigned int max_k;
+};
+
+struct dmaengine_desc_callback {
+ dma_async_tx_callback callback;
+ dma_async_tx_callback_result callback_result;
+ void *callback_param;
+};
+
+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;
+};
+
+enum genpd_notication {
+ GENPD_NOTIFY_PRE_OFF = 0,
+ GENPD_NOTIFY_OFF = 1,
+ GENPD_NOTIFY_PRE_ON = 2,
+ GENPD_NOTIFY_ON = 3,
+};
+
+struct of_genpd_provider {
+ struct list_head link;
+ struct device_node *node;
+ genpd_xlate_t xlate;
+ void *data;
+};
+
+struct pre_voltage_change_data {
+ long unsigned int old_uV;
+ long unsigned int min_uV;
+ long unsigned int max_uV;
+};
+
+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);
+};
+
+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,
+};
+
+struct regulator_enable_gpio {
+ struct list_head list;
+ struct gpio_desc *gpiod;
+ u32 enable_count;
+ u32 request_count;
+};
+
+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 summary_data {
+ struct seq_file *s;
+ struct regulator_dev *parent;
+ int level;
+};
+
+struct summary_lock_data {
+ struct ww_acquire_ctx *ww_ctx;
+ struct regulator_dev **new_contended_rdev;
+ struct regulator_dev **old_contended_rdev;
+};
+
+enum {
+ AXP20X_LDO1 = 0,
+ AXP20X_LDO2 = 1,
+ AXP20X_LDO3 = 2,
+ AXP20X_LDO4 = 3,
+ AXP20X_LDO5 = 4,
+ AXP20X_DCDC2 = 5,
+ AXP20X_DCDC3 = 6,
+ AXP20X_REG_ID_MAX = 7,
+};
+
+enum {
+ AXP22X_DCDC1 = 0,
+ AXP22X_DCDC2 = 1,
+ AXP22X_DCDC3 = 2,
+ AXP22X_DCDC4 = 3,
+ AXP22X_DCDC5 = 4,
+ AXP22X_DC1SW = 5,
+ AXP22X_DC5LDO = 6,
+ AXP22X_ALDO1 = 7,
+ AXP22X_ALDO2 = 8,
+ AXP22X_ALDO3 = 9,
+ AXP22X_ELDO1 = 10,
+ AXP22X_ELDO2 = 11,
+ AXP22X_ELDO3 = 12,
+ AXP22X_DLDO1 = 13,
+ AXP22X_DLDO2 = 14,
+ AXP22X_DLDO3 = 15,
+ AXP22X_DLDO4 = 16,
+ AXP22X_RTC_LDO = 17,
+ AXP22X_LDO_IO0 = 18,
+ AXP22X_LDO_IO1 = 19,
+ AXP22X_REG_ID_MAX = 20,
+};
+
+enum {
+ AXP313A_DCDC1 = 0,
+ AXP313A_DCDC2 = 1,
+ AXP313A_DCDC3 = 2,
+ AXP313A_ALDO1 = 3,
+ AXP313A_DLDO1 = 4,
+ AXP313A_RTC_LDO = 5,
+ AXP313A_REG_ID_MAX = 6,
+};
+
+enum {
+ AXP717_DCDC1 = 0,
+ AXP717_DCDC2 = 1,
+ AXP717_DCDC3 = 2,
+ AXP717_DCDC4 = 3,
+ AXP717_ALDO1 = 4,
+ AXP717_ALDO2 = 5,
+ AXP717_ALDO3 = 6,
+ AXP717_ALDO4 = 7,
+ AXP717_BLDO1 = 8,
+ AXP717_BLDO2 = 9,
+ AXP717_BLDO3 = 10,
+ AXP717_BLDO4 = 11,
+ AXP717_CLDO1 = 12,
+ AXP717_CLDO2 = 13,
+ AXP717_CLDO3 = 14,
+ AXP717_CLDO4 = 15,
+ AXP717_CPUSLDO = 16,
+ AXP717_BOOST = 17,
+ AXP717_REG_ID_MAX = 18,
+};
+
+enum {
+ AXP806_DCDCA = 0,
+ AXP806_DCDCB = 1,
+ AXP806_DCDCC = 2,
+ AXP806_DCDCD = 3,
+ AXP806_DCDCE = 4,
+ AXP806_ALDO1 = 5,
+ AXP806_ALDO2 = 6,
+ AXP806_ALDO3 = 7,
+ AXP806_BLDO1 = 8,
+ AXP806_BLDO2 = 9,
+ AXP806_BLDO3 = 10,
+ AXP806_BLDO4 = 11,
+ AXP806_CLDO1 = 12,
+ AXP806_CLDO2 = 13,
+ AXP806_CLDO3 = 14,
+ AXP806_SW = 15,
+ AXP806_REG_ID_MAX = 16,
+};
+
+enum {
+ AXP809_DCDC1 = 0,
+ AXP809_DCDC2 = 1,
+ AXP809_DCDC3 = 2,
+ AXP809_DCDC4 = 3,
+ AXP809_DCDC5 = 4,
+ AXP809_DC1SW = 5,
+ AXP809_DC5LDO = 6,
+ AXP809_ALDO1 = 7,
+ AXP809_ALDO2 = 8,
+ AXP809_ALDO3 = 9,
+ AXP809_ELDO1 = 10,
+ AXP809_ELDO2 = 11,
+ AXP809_ELDO3 = 12,
+ AXP809_DLDO1 = 13,
+ AXP809_DLDO2 = 14,
+ AXP809_RTC_LDO = 15,
+ AXP809_LDO_IO0 = 16,
+ AXP809_LDO_IO1 = 17,
+ AXP809_SW = 18,
+ AXP809_REG_ID_MAX = 19,
+};
+
+enum {
+ AXP803_DCDC1 = 0,
+ AXP803_DCDC2 = 1,
+ AXP803_DCDC3 = 2,
+ AXP803_DCDC4 = 3,
+ AXP803_DCDC5 = 4,
+ AXP803_DCDC6 = 5,
+ AXP803_DC1SW = 6,
+ AXP803_ALDO1 = 7,
+ AXP803_ALDO2 = 8,
+ AXP803_ALDO3 = 9,
+ AXP803_DLDO1 = 10,
+ AXP803_DLDO2 = 11,
+ AXP803_DLDO3 = 12,
+ AXP803_DLDO4 = 13,
+ AXP803_ELDO1 = 14,
+ AXP803_ELDO2 = 15,
+ AXP803_ELDO3 = 16,
+ AXP803_FLDO1 = 17,
+ AXP803_FLDO2 = 18,
+ AXP803_RTC_LDO = 19,
+ AXP803_LDO_IO0 = 20,
+ AXP803_LDO_IO1 = 21,
+ AXP803_REG_ID_MAX = 22,
+};
+
+enum {
+ AXP813_DCDC1 = 0,
+ AXP813_DCDC2 = 1,
+ AXP813_DCDC3 = 2,
+ AXP813_DCDC4 = 3,
+ AXP813_DCDC5 = 4,
+ AXP813_DCDC6 = 5,
+ AXP813_DCDC7 = 6,
+ AXP813_ALDO1 = 7,
+ AXP813_ALDO2 = 8,
+ AXP813_ALDO3 = 9,
+ AXP813_DLDO1 = 10,
+ AXP813_DLDO2 = 11,
+ AXP813_DLDO3 = 12,
+ AXP813_DLDO4 = 13,
+ AXP813_ELDO1 = 14,
+ AXP813_ELDO2 = 15,
+ AXP813_ELDO3 = 16,
+ AXP813_FLDO1 = 17,
+ AXP813_FLDO2 = 18,
+ AXP813_FLDO3 = 19,
+ AXP813_RTC_LDO = 20,
+ AXP813_LDO_IO0 = 21,
+ AXP813_LDO_IO1 = 22,
+ AXP813_SW = 23,
+ AXP813_REG_ID_MAX = 24,
+};
+
+enum {
+ AXP15060_DCDC1 = 0,
+ AXP15060_DCDC2 = 1,
+ AXP15060_DCDC3 = 2,
+ AXP15060_DCDC4 = 3,
+ AXP15060_DCDC5 = 4,
+ AXP15060_DCDC6 = 5,
+ AXP15060_ALDO1 = 6,
+ AXP15060_ALDO2 = 7,
+ AXP15060_ALDO3 = 8,
+ AXP15060_ALDO4 = 9,
+ AXP15060_ALDO5 = 10,
+ AXP15060_BLDO1 = 11,
+ AXP15060_BLDO2 = 12,
+ AXP15060_BLDO3 = 13,
+ AXP15060_BLDO4 = 14,
+ AXP15060_BLDO5 = 15,
+ AXP15060_CLDO1 = 16,
+ AXP15060_CLDO2 = 17,
+ AXP15060_CLDO3 = 18,
+ AXP15060_CLDO4 = 19,
+ AXP15060_CPUSLDO = 20,
+ AXP15060_SW = 21,
+ AXP15060_RTC_LDO = 22,
+ AXP15060_REG_ID_MAX = 23,
+};
+
+struct mpfs_reset {
+ void *base;
+ struct reset_controller_dev rcdev;
+};
+
+struct con_driver {
+ const struct consw *con;
+ const char *desc;
+ struct device *dev;
+ int node;
+ int first;
+ int last;
+ int flag;
+};
+
+enum {
+ blank_off = 0,
+ blank_normal_wait = 1,
+ blank_vesa_wait = 2,
+};
+
+enum {
+ EPecma = 0,
+ EPdec = 1,
+ EPeq = 2,
+ EPgt = 3,
+ EPlt = 4,
+};
+
+enum CSI_J {
+ CSI_J_CURSOR_TO_END = 0,
+ CSI_J_START_TO_CURSOR = 1,
+ CSI_J_VISIBLE = 2,
+ CSI_J_FULL = 3,
+};
+
+enum {
+ CSI_K_CURSOR_TO_LINEEND = 0,
+ CSI_K_LINESTART_TO_CURSOR = 1,
+ CSI_K_LINE = 2,
+};
+
+struct rgb {
+ u8 r;
+ u8 g;
+ u8 b;
+};
+
+enum {
+ CSI_m_DEFAULT = 0,
+ CSI_m_BOLD = 1,
+ CSI_m_HALF_BRIGHT = 2,
+ CSI_m_ITALIC = 3,
+ CSI_m_UNDERLINE = 4,
+ CSI_m_BLINK = 5,
+ CSI_m_REVERSE = 7,
+ CSI_m_PRI_FONT = 10,
+ CSI_m_ALT_FONT1 = 11,
+ CSI_m_ALT_FONT2 = 12,
+ CSI_m_DOUBLE_UNDERLINE = 21,
+ CSI_m_NORMAL_INTENSITY = 22,
+ CSI_m_NO_ITALIC = 23,
+ CSI_m_NO_UNDERLINE = 24,
+ CSI_m_NO_BLINK = 25,
+ CSI_m_NO_REVERSE = 27,
+ CSI_m_FG_COLOR_BEG = 30,
+ CSI_m_FG_COLOR_END = 37,
+ CSI_m_FG_COLOR = 38,
+ CSI_m_DEFAULT_FG_COLOR = 39,
+ CSI_m_BG_COLOR_BEG = 40,
+ CSI_m_BG_COLOR_END = 47,
+ CSI_m_BG_COLOR = 48,
+ CSI_m_DEFAULT_BG_COLOR = 49,
+ CSI_m_BRIGHT_FG_COLOR_BEG = 90,
+ CSI_m_BRIGHT_FG_COLOR_END = 97,
+ CSI_m_BRIGHT_FG_COLOR_OFF = 60,
+ CSI_m_BRIGHT_BG_COLOR_BEG = 100,
+ CSI_m_BRIGHT_BG_COLOR_END = 107,
+ CSI_m_BRIGHT_BG_COLOR_OFF = 60,
+};
+
+enum {
+ CSI_DEC_hl_CURSOR_KEYS = 1,
+ CSI_DEC_hl_132_COLUMNS = 3,
+ CSI_DEC_hl_REVERSE_VIDEO = 5,
+ CSI_DEC_hl_ORIGIN_MODE = 6,
+ CSI_DEC_hl_AUTOWRAP = 7,
+ CSI_DEC_hl_AUTOREPEAT = 8,
+ CSI_DEC_hl_MOUSE_X10 = 9,
+ CSI_DEC_hl_SHOW_CURSOR = 25,
+ CSI_DEC_hl_MOUSE_VT200 = 1000,
+};
+
+enum {
+ CSI_hl_DISPLAY_CTRL = 3,
+ CSI_hl_INSERT = 4,
+ CSI_hl_AUTO_NL = 20,
+};
+
+enum CSI_right_square_bracket {
+ CSI_RSB_COLOR_FOR_UNDERLINE = 1,
+ CSI_RSB_COLOR_FOR_HALF_BRIGHT = 2,
+ CSI_RSB_MAKE_CUR_COLOR_DEFAULT = 8,
+ CSI_RSB_BLANKING_INTERVAL = 9,
+ CSI_RSB_BELL_FREQUENCY = 10,
+ CSI_RSB_BELL_DURATION = 11,
+ CSI_RSB_BRING_CONSOLE_TO_FRONT = 12,
+ CSI_RSB_UNBLANK = 13,
+ CSI_RSB_VESA_OFF_INTERVAL = 14,
+ CSI_RSB_BRING_PREV_CONSOLE_TO_FRONT = 15,
+ CSI_RSB_CURSOR_BLINK_INTERVAL = 16,
+};
+
+enum vc_ctl_state {
+ ESnormal = 0,
+ ESesc = 1,
+ ESsquare = 2,
+ ESgetpars = 3,
+ ESfunckey = 4,
+ EShash = 5,
+ ESsetG0 = 6,
+ ESsetG1 = 7,
+ ESpercent = 8,
+ EScsiignore = 9,
+ ESnonstd = 10,
+ ESpalette = 11,
+ ESosc = 12,
+ ESANSI_first = 12,
+ ESapc = 13,
+ ESpm = 14,
+ ESdcs = 15,
+ ESANSI_last = 15,
+};
+
+enum {
+ ASCII_NULL = 0,
+ ASCII_BELL = 7,
+ ASCII_BACKSPACE = 8,
+ ASCII_IGNORE_FIRST = 8,
+ ASCII_HTAB = 9,
+ ASCII_LINEFEED = 10,
+ ASCII_VTAB = 11,
+ ASCII_FORMFEED = 12,
+ ASCII_CAR_RET = 13,
+ ASCII_IGNORE_LAST = 13,
+ ASCII_SHIFTOUT = 14,
+ ASCII_SHIFTIN = 15,
+ ASCII_CANCEL = 24,
+ ASCII_SUBSTITUTE = 26,
+ ASCII_ESCAPE = 27,
+ ASCII_CSI_IGNORE_FIRST = 32,
+ ASCII_CSI_IGNORE_LAST = 63,
+ ASCII_DEL = 127,
+ ASCII_EXT_CSI = 155,
+};
+
+struct interval {
+ uint32_t first;
+ uint32_t last;
+};
+
+struct vc_draw_region {
+ long unsigned int from;
+ long unsigned int to;
+ int x;
+};
+
+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;
+};
+
+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 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 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 mipi_dsi_packet {
+ size_t size;
+ u8 header[4];
+ size_t payload_length;
+ const u8 *payload;
+};
+
+struct mipi_dsi_host;
+
+struct mipi_dsi_device;
+
+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 mipi_dsi_host {
+ struct device *dev;
+ const struct mipi_dsi_host_ops *ops;
+ struct list_head list;
+};
+
+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 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;
+ long unsigned int mode_flags;
+ long unsigned int hs_rate;
+ long unsigned int lp_rate;
+ struct drm_dsc_config *dsc;
+};
+
+struct mipi_dsi_device_info {
+ char type[20];
+ u32 channel;
+ struct device_node *node;
+};
+
+struct mipi_dsi_multi_context {
+ struct mipi_dsi_device *dsi;
+ int accum_err;
+};
+
+enum mipi_dsi_compression_algo {
+ MIPI_DSI_COMPRESSION_DSC = 0,
+ MIPI_DSI_COMPRESSION_VENDOR = 3,
+};
+
+enum mipi_dsi_dcs_tear_mode {
+ MIPI_DSI_DCS_TEAR_MODE_VBLANK = 0,
+ MIPI_DSI_DCS_TEAR_MODE_VHBLANK = 1,
+};
+
+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 *);
+};
+
+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,
+};
+
+struct irq_affinity_devres {
+ unsigned int count;
+ unsigned int irq[0];
+};
+
+struct platform_object {
+ struct platform_device pdev;
+ char name[0];
+};
+
+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;
+};
+
+struct auxiliary_irq_info {
+ struct device_attribute sysfs_attr;
+ char name[11];
+};
+
+struct regmap_debugfs_off_cache {
+ struct list_head list;
+ off_t min;
+ off_t max;
+ unsigned int base_reg;
+ unsigned int max_reg;
+};
+
+struct regmap_debugfs_node {
+ struct regmap *map;
+ struct list_head link;
+};
+
+struct nd_mapping_desc {
+ struct nvdimm *nvdimm;
+ u64 start;
+ u64 size;
+ int position;
+};
+
+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;
+ long unsigned int flags;
+ int memregion;
+ struct device_node *of_node;
+ int (*flush)(struct nd_region *, struct bio *);
+};
+
+struct conflict_context {
+ struct nd_region *nd_region;
+ resource_size_t start;
+ resource_size_t size;
+};
+
+enum mf_flags {
+ MF_COUNT_INCREASED = 1,
+ MF_ACTION_REQUIRED = 2,
+ MF_MUST_KILL = 4,
+ MF_SOFT_OFFLINE = 8,
+ MF_UNPOISON = 16,
+ MF_SW_SIMULATED = 32,
+ MF_NO_RETRY = 64,
+ MF_MEM_PRE_REMOVE = 128,
+};
+
+struct dax_device {
+ struct inode inode;
+ struct cdev cdev;
+ void *private;
+ long unsigned int flags;
+ const struct dax_operations *ops;
+ void *holder_data;
+ const struct dax_holder_operations *holder_ops;
+};
+
+enum dax_device_flags {
+ DAXDEV_ALIVE = 0,
+ DAXDEV_WRITE_CACHE = 1,
+ DAXDEV_SYNC = 2,
+ DAXDEV_NOCACHE = 3,
+ DAXDEV_NOMC = 4,
+};
+
+struct dma_resv_list {
+ struct callback_head rcu;
+ u32 num_fences;
+ u32 max_fences;
+ struct dma_fence *table[0];
+};
+
+struct scsi_proc_entry {
+ struct list_head entry;
+ const struct scsi_host_template *sht;
+ struct proc_dir_entry *proc_dir;
+ unsigned int present;
+};
+
+struct ccs_modesel_head {
+ __u8 _r1;
+ __u8 medium;
+ __u8 _r2;
+ __u8 block_desc_length;
+ __u8 density;
+ __u8 number_blocks_hi;
+ __u8 number_blocks_med;
+ __u8 number_blocks_lo;
+ __u8 _r3;
+ __u8 block_length_hi;
+ __u8 block_length_med;
+ __u8 block_length_lo;
+};
+
+struct mtdblk_dev {
+ struct mtd_blktrans_dev mbd;
+ int count;
+ struct mutex cache_mutex;
+ unsigned char *cache_data;
+ long unsigned int cache_offset;
+ unsigned int cache_size;
+ enum {
+ STATE_EMPTY = 0,
+ STATE_CLEAN = 1,
+ STATE_DIRTY = 2,
+ } cache_state;
+};
+
+struct cfi_extquery {
+ uint8_t pri[3];
+ uint8_t MajorVersion;
+ uint8_t MinorVersion;
+};
+
+struct cfi_fixup {
+ uint16_t mfr;
+ uint16_t id;
+ void (*fixup)(struct mtd_info *);
+};
+
+typedef int (*varsize_frob_t)(struct map_info *, struct flchip *, long unsigned int, int, void *);
+
+struct mdio_board_entry {
+ struct list_head list;
+ struct mdio_board_info board_info;
+};
+
+struct phy_fixup {
+ struct list_head list;
+ char bus_id[64];
+ u32 phy_uid;
+ u32 phy_uid_mask;
+ int (*run)(struct phy_device *);
+};
+
+enum led_trigger_netdev_modes {
+ TRIGGER_NETDEV_LINK = 0,
+ TRIGGER_NETDEV_LINK_10 = 1,
+ TRIGGER_NETDEV_LINK_100 = 2,
+ TRIGGER_NETDEV_LINK_1000 = 3,
+ TRIGGER_NETDEV_LINK_2500 = 4,
+ TRIGGER_NETDEV_LINK_5000 = 5,
+ TRIGGER_NETDEV_LINK_10000 = 6,
+ TRIGGER_NETDEV_HALF_DUPLEX = 7,
+ TRIGGER_NETDEV_FULL_DUPLEX = 8,
+ TRIGGER_NETDEV_TX = 9,
+ TRIGGER_NETDEV_RX = 10,
+ TRIGGER_NETDEV_TX_ERR = 11,
+ TRIGGER_NETDEV_RX_ERR = 12,
+ __TRIGGER_NETDEV_MAX = 13,
+};
+
+struct rtl821x_priv {
+ u16 phycr1;
+ u16 phycr2;
+ bool has_phycr2;
+ struct clk *clk;
+};
+
+union e1000_rx_desc_packet_split {
+ struct {
+ __le64 buffer_addr[4];
+ } read;
+ struct {
+ struct {
+ __le32 mrq;
+ union {
+ __le32 rss;
+ struct {
+ __le16 ip_id;
+ __le16 csum;
+ } csum_ip;
+ } hi_dword;
+ } lower;
+ struct {
+ __le32 status_error;
+ __le16 length0;
+ __le16 vlan;
+ } middle;
+ struct {
+ __le16 header_status;
+ __le16 length[3];
+ } upper;
+ __le64 reserved;
+ } wb;
+};
+
+struct e1000_context_desc {
+ union {
+ __le32 ip_config;
+ struct {
+ u8 ipcss;
+ u8 ipcso;
+ __le16 ipcse;
+ } ip_fields;
+ } lower_setup;
+ union {
+ __le32 tcp_config;
+ struct {
+ u8 tucss;
+ u8 tucso;
+ __le16 tucse;
+ } tcp_fields;
+ } upper_setup;
+ __le32 cmd_and_length;
+ union {
+ __le32 data;
+ struct {
+ u8 status;
+ u8 hdr_len;
+ __le16 mss;
+ } fields;
+ } tcp_seg_setup;
+};
+
+enum e1000_boards {
+ board_82571 = 0,
+ board_82572 = 1,
+ board_82573 = 2,
+ board_82574 = 3,
+ board_82583 = 4,
+ board_80003es2lan = 5,
+ board_ich8lan = 6,
+ board_ich9lan = 7,
+ board_ich10lan = 8,
+ board_pchlan = 9,
+ board_pch2lan = 10,
+ board_pch_lpt = 11,
+ board_pch_spt = 12,
+ board_pch_cnp = 13,
+ board_pch_tgp = 14,
+ board_pch_adp = 15,
+ board_pch_mtp = 16,
+};
+
+enum latency_range {
+ lowest_latency = 0,
+ low_latency = 1,
+ bulk_latency = 2,
+ latency_invalid = 255,
+};
+
+struct e1000_reg_info {
+ u32 ofs;
+ char *name;
+};
+
+struct my_u0 {
+ __le64 a;
+ __le64 b;
+};
+
+struct my_u1 {
+ __le64 a;
+ __le64 b;
+ __le64 c;
+ __le64 d;
+};
+
+struct usbdevfs_ctrltransfer {
+ __u8 bRequestType;
+ __u8 bRequest;
+ __u16 wValue;
+ __u16 wIndex;
+ __u16 wLength;
+ __u32 timeout;
+ void *data;
+};
+
+struct usbdevfs_bulktransfer {
+ unsigned int ep;
+ unsigned int len;
+ unsigned int timeout;
+ void *data;
+};
+
+struct usbdevfs_setinterface {
+ unsigned int interface;
+ unsigned int altsetting;
+};
+
+struct usbdevfs_disconnectsignal {
+ unsigned int signr;
+ void *context;
+};
+
+struct usbdevfs_getdriver {
+ unsigned int interface;
+ char driver[256];
+};
+
+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_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 *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 *usercontext;
+ struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl {
+ int ifno;
+ int ioctl_code;
+ void *data;
+};
+
+struct usbdevfs_disconnect_claim {
+ unsigned int interface;
+ unsigned int flags;
+ char driver[256];
+};
+
+struct usbdevfs_streams {
+ unsigned int num_streams;
+ unsigned int num_eps;
+ unsigned char eps[0];
+};
+
+struct usbdevfs_ctrltransfer32 {
+ u8 bRequestType;
+ u8 bRequest;
+ u16 wValue;
+ u16 wIndex;
+ u16 wLength;
+ u32 timeout;
+ compat_caddr_t data;
+};
+
+struct usbdevfs_bulktransfer32 {
+ compat_uint_t ep;
+ compat_uint_t len;
+ compat_uint_t timeout;
+ compat_caddr_t data;
+};
+
+struct usbdevfs_disconnectsignal32 {
+ compat_int_t signr;
+ compat_caddr_t context;
+};
+
+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 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;
+ long unsigned int ifclaimed;
+ u32 disabled_bulk_eps;
+ long unsigned int interface_allowed_mask;
+ int not_yet_resumed;
+ bool suspend_allowed;
+ bool privileges_dropped;
+};
+
+struct usb_memory {
+ struct list_head memlist;
+ int vma_use_count;
+ int urb_use_count;
+ u32 size;
+ void *mem;
+ dma_addr_t dma_handle;
+ long unsigned int vm_start;
+ struct usb_dev_state *ps;
+};
+
+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 *userbuffer;
+ void *userurb;
+ sigval_t userurb_sigval;
+ struct urb *urb;
+ struct usb_memory *usbm;
+ unsigned int mem_usage;
+ int status;
+ u8 bulk_addr;
+ u8 bulk_status;
+};
+
+enum snoop_when {
+ SUBMIT = 0,
+ COMPLETE = 1,
+};
+
+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 swoc_info {
+ __u8 rev;
+ __u8 reserved[8];
+ __u16 LinuxSKU;
+ __u16 LinuxVer;
+ __u8 reserved2[47];
+} __attribute__((packed));
+
+struct atkbd {
+ struct ps2dev ps2dev;
+ struct input_dev *dev;
+ char name[64];
+ char phys[32];
+ short unsigned int id;
+ short unsigned int keycode[512];
+ long unsigned int 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;
+ long unsigned int xl_bit;
+ unsigned int last;
+ long unsigned int time;
+ long unsigned int err_count;
+ struct delayed_work event_work;
+ long unsigned int event_jiffies;
+ long unsigned int event_mask;
+ struct mutex mutex;
+ struct vivaldi_data vdata;
+};
+
+struct i2c_devinfo {
+ struct list_head list;
+ int busnum;
+ struct i2c_board_info board_info;
+};
+
+enum {
+ POWER_SUPPLY_SCOPE_UNKNOWN = 0,
+ POWER_SUPPLY_SCOPE_SYSTEM = 1,
+ POWER_SUPPLY_SCOPE_DEVICE = 2,
+};
+
+enum power_supply_notifier_events {
+ PSY_EVENT_PROP_CHANGED = 0,
+};
+
+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 mmc_pwrseq_emmc {
+ struct mmc_pwrseq pwrseq;
+ struct notifier_block reset_nb;
+ struct gpio_desc *reset_gpio;
+};
+
+struct arm_smccc_res {
+ long unsigned int a0;
+ long unsigned int a1;
+ long unsigned int a2;
+ long unsigned int a3;
+};
+
+struct arm_smccc_quirk {
+ int id;
+ union {
+ long unsigned int a6;
+ } state;
+};
+
+struct cqhci_host_ops;
+
+struct cqhci_slot;
+
+struct cqhci_host {
+ const struct cqhci_host_ops *ops;
+ void *mmio;
+ struct mmc_host *mmc;
+ spinlock_t lock;
+ unsigned int rca;
+ bool dma64;
+ int num_slots;
+ int qcnt;
+ u32 dcmd_slot;
+ u32 caps;
+ u32 quirks;
+ bool enabled;
+ bool halted;
+ bool init_done;
+ bool activated;
+ bool waiting_for_idle;
+ bool recovery_halt;
+ size_t desc_size;
+ size_t data_size;
+ u8 *desc_base;
+ u8 slot_sz;
+ u8 task_desc_len;
+ u8 link_desc_len;
+ u8 *trans_desc_base;
+ u8 trans_desc_len;
+ dma_addr_t desc_dma_base;
+ dma_addr_t trans_desc_dma_base;
+ struct completion halt_comp;
+ wait_queue_head_t wait_queue;
+ struct cqhci_slot *slot;
+};
+
+struct cqhci_host_ops {
+ void (*dumpregs)(struct mmc_host *);
+ void (*write_l)(struct cqhci_host *, u32, int);
+ u32 (*read_l)(struct cqhci_host *, int);
+ void (*enable)(struct mmc_host *);
+ void (*disable)(struct mmc_host *, bool);
+ void (*update_dcmd_desc)(struct mmc_host *, struct mmc_request *, u64 *);
+ void (*pre_enable)(struct mmc_host *);
+ void (*post_disable)(struct mmc_host *);
+ void (*set_tran_desc)(struct cqhci_host *, u8 **, dma_addr_t, int, bool, bool);
+};
+
+enum dwcmshc_rk_type {
+ DWCMSHC_RK3568 = 0,
+ DWCMSHC_RK3588 = 1,
+};
+
+struct rk35xx_priv {
+ struct reset_control *reset;
+ enum dwcmshc_rk_type devtype;
+ u8 txclk_tapnum;
+};
+
+struct dwcmshc_priv {
+ struct clk *bus_clk;
+ int vendor_specific_area1;
+ int vendor_specific_area2;
+ int num_other_clks;
+ struct clk_bulk_data other_clks[3];
+ void *priv;
+ u16 delay_line;
+ u16 flags;
+};
+
+struct dwcmshc_pltfm_data {
+ const struct sdhci_pltfm_data pdata;
+ int (*init)(struct device *, struct sdhci_host *, struct dwcmshc_priv *);
+ void (*postinit)(struct sdhci_host *, struct dwcmshc_priv *);
+};
+
+struct virtio_crypto_sym_session_info {
+ __u64 session_id;
+};
+
+struct virtio_crypto_skcipher_ctx {
+ struct virtio_crypto *vcrypto;
+ struct crypto_skcipher *tfm;
+ struct virtio_crypto_sym_session_info enc_sess_info;
+ struct virtio_crypto_sym_session_info dec_sess_info;
+};
+
+struct virtio_crypto_sym_request {
+ struct virtio_crypto_request base;
+ uint32_t type;
+ struct virtio_crypto_skcipher_ctx *skcipher_ctx;
+ struct skcipher_request *skcipher_req;
+ uint8_t *iv;
+ bool encrypt;
+};
+
+struct virtio_crypto_algo {
+ uint32_t algonum;
+ uint32_t service;
+ unsigned int active_devs;
+ struct skcipher_engine_alg algo;
+};
+
+struct usage_priority {
+ __u32 usage;
+ bool global;
+ unsigned int slot_overwrite;
+};
+
+typedef bool (*hid_usage_cmp_t)(struct hid_usage *, unsigned int, unsigned int);
+
+union extcon_property_value {
+ int intval;
+};
+
+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;
+};
+
+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];
+ long unsigned int usb_bits[1];
+ long unsigned int chg_bits[1];
+ long unsigned int jack_bits[1];
+ long unsigned int disp_bits[1];
+};
+
+struct __extcon_info {
+ unsigned int type;
+ unsigned int id;
+ const char *name;
+};
+
+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,
+};
+
+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,
+};
+
+enum sbi_ext_pmu_fid {
+ SBI_EXT_PMU_NUM_COUNTERS = 0,
+ SBI_EXT_PMU_COUNTER_GET_INFO = 1,
+ SBI_EXT_PMU_COUNTER_CFG_MATCH = 2,
+ SBI_EXT_PMU_COUNTER_START = 3,
+ SBI_EXT_PMU_COUNTER_STOP = 4,
+ SBI_EXT_PMU_COUNTER_FW_READ = 5,
+ SBI_EXT_PMU_COUNTER_FW_READ_HI = 6,
+ SBI_EXT_PMU_SNAPSHOT_SET_SHMEM = 7,
+};
+
+union sbi_pmu_ctr_info {
+ long unsigned int value;
+ struct {
+ long unsigned int csr: 12;
+ long unsigned int width: 6;
+ long unsigned int reserved: 45;
+ long unsigned int type: 1;
+ };
+};
+
+struct riscv_pmu_snapshot_data {
+ u64 ctr_overflow_mask;
+ u64 ctr_values[64];
+ u64 reserved[447];
+};
+
+enum sbi_pmu_hw_generic_events_t {
+ SBI_PMU_HW_NO_EVENT = 0,
+ SBI_PMU_HW_CPU_CYCLES = 1,
+ SBI_PMU_HW_INSTRUCTIONS = 2,
+ SBI_PMU_HW_CACHE_REFERENCES = 3,
+ SBI_PMU_HW_CACHE_MISSES = 4,
+ SBI_PMU_HW_BRANCH_INSTRUCTIONS = 5,
+ SBI_PMU_HW_BRANCH_MISSES = 6,
+ SBI_PMU_HW_BUS_CYCLES = 7,
+ SBI_PMU_HW_STALLED_CYCLES_FRONTEND = 8,
+ SBI_PMU_HW_STALLED_CYCLES_BACKEND = 9,
+ SBI_PMU_HW_REF_CPU_CYCLES = 10,
+ SBI_PMU_HW_GENERAL_MAX = 11,
+};
+
+enum sbi_pmu_event_type {
+ SBI_PMU_EVENT_TYPE_HW = 0,
+ SBI_PMU_EVENT_TYPE_CACHE = 1,
+ SBI_PMU_EVENT_TYPE_RAW = 2,
+ SBI_PMU_EVENT_TYPE_FW = 15,
+};
+
+enum sbi_pmu_ctr_type {
+ SBI_PMU_CTR_TYPE_HW = 0,
+ SBI_PMU_CTR_TYPE_FW = 1,
+};
+
+struct hw_gen_event {
+ uint32_t event_code: 16;
+ uint32_t event_type: 4;
+ uint32_t reserved: 12;
+};
+
+struct hw_cache_event {
+ uint32_t result_id: 1;
+ uint32_t op_id: 2;
+ uint32_t cache_id: 13;
+ uint32_t event_type: 4;
+ uint32_t reserved: 12;
+};
+
+struct sbi_pmu_event_data {
+ union {
+ union {
+ struct hw_gen_event hw_gen_event;
+ struct hw_cache_event hw_cache_event;
+ };
+ uint32_t event_idx;
+ };
+};
+
+struct snd_timer_ginfo {
+ struct snd_timer_id tid;
+ unsigned int flags;
+ int card;
+ unsigned char id[64];
+ unsigned char name[80];
+ long unsigned int reserved0;
+ long unsigned int resolution;
+ long unsigned int resolution_min;
+ long unsigned int resolution_max;
+ unsigned int clients;
+ unsigned char reserved[32];
+};
+
+struct snd_timer_gparams {
+ struct snd_timer_id tid;
+ long unsigned int period_num;
+ long unsigned int period_den;
+ unsigned char reserved[32];
+};
+
+struct snd_timer_gstatus {
+ struct snd_timer_id tid;
+ long unsigned int resolution;
+ long unsigned int resolution_num;
+ long unsigned int resolution_den;
+ unsigned char reserved[32];
+};
+
+struct snd_timer_select {
+ struct snd_timer_id id;
+ unsigned char reserved[32];
+};
+
+struct snd_timer_info {
+ unsigned int flags;
+ int card;
+ unsigned char id[64];
+ unsigned char name[80];
+ long unsigned int reserved0;
+ long unsigned int resolution;
+ unsigned char reserved[64];
+};
+
+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_uinfo {
+ __u64 resolution;
+ int fd;
+ unsigned int id;
+ unsigned char reserved[16];
+};
+
+struct snd_timer_read {
+ unsigned int resolution;
+ unsigned int ticks;
+};
+
+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,
+};
+
+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 *, long unsigned int, long unsigned int);
+ void (*ccallback)(struct snd_timer_instance *, int, struct timespec64 *, long unsigned int);
+ void (*disconnect)(struct snd_timer_instance *);
+ void *callback_data;
+ long unsigned int ticks;
+ long unsigned int cticks;
+ long unsigned int pticks;
+ long unsigned int resolution;
+ long unsigned int 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;
+};
+
+enum timer_tread_format {
+ TREAD_FORMAT_NONE = 0,
+ TREAD_FORMAT_TIME64 = 1,
+ TREAD_FORMAT_TIME32 = 2,
+};
+
+struct snd_timer_tread32 {
+ int event;
+ s32 tstamp_sec;
+ s32 tstamp_nsec;
+ unsigned int val;
+};
+
+struct snd_timer_tread64 {
+ int event;
+ u8 pad1[4];
+ s64 tstamp_sec;
+ s64 tstamp_nsec;
+ unsigned int val;
+ u8 pad2[4];
+};
+
+struct snd_timer_user {
+ struct snd_timer_instance *timeri;
+ int tread;
+ long unsigned int ticks;
+ long unsigned int 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;
+ long unsigned int 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_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_timer_system_private {
+ struct timer_list tlist;
+ struct snd_timer *snd_timer;
+ long unsigned int last_expires;
+ long unsigned int last_jiffies;
+ long unsigned int correction;
+};
+
+enum {
+ SNDRV_TIMER_IOCTL_START_OLD = 21536,
+ SNDRV_TIMER_IOCTL_STOP_OLD = 21537,
+ SNDRV_TIMER_IOCTL_CONTINUE_OLD = 21538,
+ SNDRV_TIMER_IOCTL_PAUSE_OLD = 21539,
+};
+
+struct snd_timer_gparams32 {
+ struct snd_timer_id tid;
+ u32 period_num;
+ u32 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];
+};
+
+enum {
+ SNDRV_TIMER_IOCTL_GPARAMS32 = 1077695492,
+ SNDRV_TIMER_IOCTL_INFO32 = 2162185233,
+ SNDRV_TIMER_IOCTL_STATUS_COMPAT32 = 1079530516,
+ SNDRV_TIMER_IOCTL_STATUS_COMPAT64 = 1080054804,
+};
+
+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 ip_auth_hdr {
+ __u8 nexthdr;
+ __u8 hdrlen;
+ __be16 reserved;
+ __be32 spi;
+ __be32 seq_no;
+ __u8 auth_data[0];
+};
+
+struct mpls_shim_hdr {
+ __be32 label_stack_entry;
+};
+
+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,
+};
+
+struct drop_reason_list {
+ const char * const *reasons;
+ size_t n_reasons;
+};
+
+struct ts_state {
+ unsigned int offset;
+ char cb[48];
+};
+
+struct ts_config;
+
+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 page_frag_1k {
+ void *va;
+ u16 offset;
+ bool pfmemalloc;
+};
+
+struct napi_alloc_cache {
+ local_lock_t bh_lock;
+ struct page_frag_cache page;
+ struct page_frag_1k page_small;
+ unsigned int skb_count;
+ void *skb_cache[64];
+};
+
+struct skb_free_array {
+ unsigned int skb_count;
+ void *skb_array[16];
+};
+
+typedef int (*sendmsg_func)(struct sock *, struct msghdr *);
+
+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,
+};
+
+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 rtnl_link_ifmap {
+ __u64 mem_start;
+ __u64 mem_end;
+ __u64 base_addr;
+ __u16 irq;
+ __u8 dma;
+ __u8 port;
+};
+
+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_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_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_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,
+};
+
+struct ifla_vf_mac {
+ __u32 vf;
+ __u8 mac[32];
+};
+
+struct ifla_vf_broadcast {
+ __u8 broadcast[32];
+};
+
+struct ifla_vf_vlan {
+ __u32 vf;
+ __u32 vlan;
+ __u32 qos;
+};
+
+enum {
+ IFLA_VF_VLAN_INFO_UNSPEC = 0,
+ IFLA_VF_VLAN_INFO = 1,
+ __IFLA_VF_VLAN_INFO_MAX = 2,
+};
+
+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;
+};
+
+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,
+};
+
+struct ifla_vf_trust {
+ __u32 vf;
+ __u32 setting;
+};
+
+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,
+};
+
+struct if_stats_msg {
+ __u8 family;
+ __u8 pad1;
+ __u16 pad2;
+ __u32 ifindex;
+ __u32 filter_mask;
+};
+
+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_STATS_GETSET_UNSPEC = 0,
+ IFLA_STATS_GET_FILTERS = 1,
+ IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS = 2,
+ __IFLA_STATS_GETSET_MAX = 3,
+};
+
+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 {
+ 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 {
+ 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_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_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,
+};
+
+struct br_port_msg {
+ __u8 family;
+ __u32 ifindex;
+};
+
+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 {
+ MDBA_SET_ENTRY_UNSPEC = 0,
+ MDBA_SET_ENTRY = 1,
+ MDBA_SET_ENTRY_ATTRS = 2,
+ __MDBA_SET_ENTRY_MAX = 3,
+};
+
+enum {
+ MDBA_GET_ENTRY_UNSPEC = 0,
+ MDBA_GET_ENTRY = 1,
+ MDBA_GET_ENTRY_ATTRS = 2,
+ __MDBA_GET_ENTRY_MAX = 3,
+};
+
+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;
+};
+
+enum rtnl_kinds {
+ RTNL_KIND_NEW = 0,
+ RTNL_KIND_DEL = 1,
+ RTNL_KIND_GET = 2,
+ RTNL_KIND_SET = 3,
+};
+
+struct rtnl_msg_handler {
+ struct module *owner;
+ int protocol;
+ int msgtype;
+ rtnl_doit_func doit;
+ rtnl_dumpit_func dumpit;
+ int flags;
+};
+
+struct rtnl_link {
+ rtnl_doit_func doit;
+ rtnl_dumpit_func dumpit;
+ struct module *owner;
+ unsigned int flags;
+ struct callback_head rcu;
+};
+
+struct rtnl_newlink_tbs {
+ struct nlattr *tb[66];
+ struct nlattr *attr[51];
+ struct nlattr *slave_attr[45];
+};
+
+struct rtnl_offload_xstats_request_used {
+ bool request;
+ bool used;
+};
+
+struct rtnl_stats_dump_filters {
+ u32 mask[6];
+};
+
+struct rtnl_mdb_dump_ctx {
+ long int idx;
+};
+
+struct xdp_frame_bulk {
+ int count;
+ void *xa;
+ void *q[16];
+};
+
+struct xdp_attachment_info {
+ struct bpf_prog *prog;
+ u32 flags;
+};
+
+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;
+};
+
+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,
+};
+
+struct tcf_t {
+ __u64 install;
+ __u64 lastuse;
+ __u64 expires;
+ __u64 firstuse;
+};
+
+struct psample_group {
+ struct list_head list;
+ struct net *net;
+ u32 group_num;
+ u32 refcount;
+ u32 seq;
+ struct callback_head rcu;
+};
+
+struct action_gate_entry {
+ u8 gate_state;
+ u32 interval;
+ s32 ipv;
+ s32 maxoctets;
+};
+
+enum qdisc_class_ops_flags {
+ QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
+};
+
+enum tcf_proto_ops_flags {
+ TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
+};
+
+typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
+
+struct tcf_idrinfo {
+ struct mutex lock;
+ struct idr action_idr;
+ struct net *net;
+};
+
+struct tc_action_ops;
+
+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 *tcfa_rate_est;
+ spinlock_t tcfa_lock;
+ struct gnet_stats_basic_sync *cpu_bstats;
+ struct gnet_stats_basic_sync *cpu_bstats_hw;
+ struct gnet_stats_queue *cpu_qstats;
+ struct tc_cookie *user_cookie;
+ struct tcf_chain *goto_chain;
+ u32 tcfa_flags;
+ u8 hw_stats;
+ u8 used_hw_stats;
+ bool used_hw_stats_valid;
+ u32 in_hw_count;
+};
+
+typedef void (*tc_action_priv_destructor)(void *);
+
+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 tc_cookie {
+ u8 *data;
+ u32 len;
+ struct callback_head rcu;
+};
+
+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;
+};
+
+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_NUM = 4,
+};
+
+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;
+};
+
+union tcf_exts_miss_cookie {
+ struct {
+ u32 miss_cookie_base;
+ u32 act_index;
+ };
+ u64 miss_cookie;
+};
+
+struct tcf_filter_chain_list_item {
+ struct list_head list;
+ tcf_chain_head_change_t *chain_head_change;
+ void *chain_head_change_priv;
+};
+
+struct tcf_net {
+ spinlock_t idr_lock;
+ struct idr idr;
+};
+
+struct tcf_block_owner_item {
+ struct list_head list;
+ struct Qdisc *q;
+ enum flow_block_binder_type binder_type;
+};
+
+struct tcf_chain_info {
+ struct tcf_proto **pprev;
+ struct tcf_proto *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;
+};
+
+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,
+};
+
+enum {
+ ETHTOOL_A_STRINGS_UNSPEC = 0,
+ ETHTOOL_A_STRINGS_STRING = 1,
+ __ETHTOOL_A_STRINGS_CNT = 2,
+ ETHTOOL_A_STRINGS_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_STRINGSETS_UNSPEC = 0,
+ ETHTOOL_A_STRINGSETS_STRINGSET = 1,
+ __ETHTOOL_A_STRINGSETS_CNT = 2,
+ ETHTOOL_A_STRINGSETS_MAX = 1,
+};
+
+struct strset_info {
+ bool per_dev;
+ bool free_strings;
+ unsigned int count;
+ const char (*strings)[32];
+};
+
+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];
+};
+
+struct wol_reply_data {
+ struct ethnl_reply_data base;
+ struct ethtool_wolinfo wol;
+ bool show_sopass;
+};
+
+enum {
+ ETHTOOL_A_TS_STAT_UNSPEC = 0,
+ ETHTOOL_A_TS_STAT_TX_PKTS = 1,
+ ETHTOOL_A_TS_STAT_TX_LOST = 2,
+ ETHTOOL_A_TS_STAT_TX_ERR = 3,
+ __ETHTOOL_A_TS_STAT_CNT = 4,
+ ETHTOOL_A_TS_STAT_MAX = 3,
+};
+
+struct tsinfo_reply_data {
+ struct ethnl_reply_data base;
+ struct kernel_ethtool_ts_info ts_info;
+ struct ethtool_ts_stats stats;
+};
+
+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,
+};
+
+struct stats_req_info {
+ struct ethnl_req_info base;
+ long unsigned int 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;
+};
+
+struct nf_bridge_info {
+ enum {
+ BRNF_PROTO_UNCHANGED = 0,
+ BRNF_PROTO_8021Q = 1,
+ BRNF_PROTO_PPPOE = 2,
+ } orig_proto: 8;
+ u8 pkt_otherhost: 1;
+ u8 in_prerouting: 1;
+ u8 bridged_dnat: 1;
+ u8 sabotage_in_done: 1;
+ __u16 frag_max_size;
+ int physinif;
+ struct net_device *physoutdev;
+ union {
+ __be32 ipv4_daddr;
+ struct in6_addr ipv6_daddr;
+ char neigh_header[8];
+ };
+};
+
+struct ip_rt_info {
+ __be32 daddr;
+ __be32 saddr;
+ u_int8_t tos;
+ u_int32_t mark;
+};
+
+struct nf_queue_handler {
+ int (*outfn)(struct nf_queue_entry *, unsigned int);
+ void (*nf_hook_drop)(struct net *);
+};
+
+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 ip_tunnel_parm {
+ char name[16];
+ int link;
+ __be16 i_flags;
+ __be16 o_flags;
+ __be32 i_key;
+ __be32 o_key;
+ struct iphdr iph;
+};
+
+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 *collect_md_tun;
+ int type;
+};
+
+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 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 bpf_iter__unix {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct unix_sock *unix_sk;
+ };
+ uid_t uid;
+};
+
+struct nduseroptmsg {
+ unsigned char nduseropt_family;
+ unsigned char nduseropt_pad1;
+ short unsigned int nduseropt_opts_len;
+ int nduseropt_ifindex;
+ __u8 nduseropt_icmp_type;
+ __u8 nduseropt_icmp_code;
+ short unsigned int nduseropt_pad2;
+ unsigned int nduseropt_pad3;
+};
+
+enum {
+ NDUSEROPT_UNSPEC = 0,
+ NDUSEROPT_SRCADDR = 1,
+ __NDUSEROPT_MAX = 2,
+};
+
+enum {
+ NEIGH_ARP_TABLE = 0,
+ NEIGH_ND_TABLE = 1,
+ NEIGH_DN_TABLE = 2,
+ NEIGH_NR_TABLES = 3,
+ NEIGH_LINK_TABLE = 3,
+};
+
+struct neighbour_cb {
+ long unsigned int sched_next;
+ unsigned int flags;
+};
+
+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 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 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;
+};
+
+struct sockaddr_pkt {
+ short unsigned int spkt_family;
+ unsigned char spkt_device[14];
+ __be16 spkt_protocol;
+};
+
+struct sockaddr_ll {
+ short unsigned int sll_family;
+ __be16 sll_protocol;
+ int sll_ifindex;
+ short unsigned int sll_hatype;
+ unsigned char sll_pkttype;
+ unsigned char sll_halen;
+ unsigned char sll_addr[8];
+};
+
+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;
+};
+
+struct tpacket_rollover_stats {
+ __u64 tp_all;
+ __u64 tp_huge;
+ __u64 tp_failed;
+};
+
+union tpacket_stats_u {
+ struct tpacket_stats stats1;
+ struct tpacket_stats_v3 stats3;
+};
+
+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 tpacket_hdr {
+ long unsigned int tp_status;
+ unsigned int tp_len;
+ unsigned int tp_snaplen;
+ short unsigned int tp_mac;
+ short unsigned int 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 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 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;
+};
+
+enum tpacket_versions {
+ TPACKET_V1 = 0,
+ TPACKET_V2 = 1,
+ TPACKET_V3 = 2,
+};
+
+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_mclist {
+ struct packet_mclist *next;
+ int ifindex;
+ int count;
+ short unsigned int type;
+ short unsigned int alen;
+ unsigned char addr[32];
+};
+
+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;
+ short unsigned int kactive_blk_num;
+ short unsigned int blk_sizeof_priv;
+ short unsigned int 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;
+ short unsigned int retire_blk_tov;
+ short unsigned int version;
+ long unsigned int tov_in_jiffies;
+ struct timer_list retire_blk_timer;
+};
+
+struct pgv {
+ char *buffer;
+};
+
+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 *pending_refcnt;
+ union {
+ long unsigned int *rx_owner_map;
+ struct tpacket_kbdq_core prb_bdqc;
+ };
+};
+
+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 *bpf_prog;
+ };
+ struct list_head list;
+ spinlock_t lock;
+ refcount_t sk_ref;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct packet_type prot_hook;
+ struct sock *arr[0];
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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_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;
+ long unsigned int 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 *cached_dev;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ struct packet_type prot_hook;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ atomic_t tp_drops;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+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 packet_mreq_max {
+ int mr_ifindex;
+ short unsigned int mr_type;
+ short unsigned int mr_alen;
+ unsigned char mr_address[32];
+};
+
+union tpacket_uhdr {
+ struct tpacket_hdr *h1;
+ struct tpacket2_hdr *h2;
+ struct tpacket3_hdr *h3;
+ void *raw;
+};
+
+struct packet_skb_cb {
+ union {
+ struct sockaddr_pkt pkt;
+ union {
+ unsigned int origlen;
+ struct sockaddr_ll ll;
+ };
+ } sa;
+};
+
+enum {
+ RPCBPROC_NULL = 0,
+ RPCBPROC_SET = 1,
+ RPCBPROC_UNSET = 2,
+ RPCBPROC_GETPORT = 3,
+ RPCBPROC_GETADDR = 3,
+ RPCBPROC_DUMP = 4,
+ RPCBPROC_CALLIT = 5,
+ RPCBPROC_BCAST = 5,
+ RPCBPROC_GETTIME = 6,
+ RPCBPROC_UADDR2TADDR = 7,
+ RPCBPROC_TADDR2UADDR = 8,
+ RPCBPROC_GETVERSADDR = 9,
+ RPCBPROC_INDIRECT = 10,
+ RPCBPROC_GETADDRLIST = 11,
+ RPCBPROC_GETSTAT = 12,
+};
+
+struct rpcbind_args {
+ struct rpc_xprt *r_xprt;
+ u32 r_prog;
+ u32 r_vers;
+ u32 r_prot;
+ short unsigned int r_port;
+ const char *r_netid;
+ const char *r_addr;
+ const char *r_owner;
+ int r_status;
+};
+
+struct rpcb_info {
+ u32 rpc_vers;
+ const struct rpc_procinfo *rpc_proc;
+};
+
+struct xprt_addr {
+ const char *addr;
+ struct callback_head rcu;
+};
+
+enum p9_fid_reftype {
+ P9_FID_REF_CREATE = 0,
+ P9_FID_REF_GET = 1,
+ P9_FID_REF_PUT = 2,
+ P9_FID_REF_DESTROY = 3,
+} __attribute__((mode(byte)));
+
+enum {
+ Opt_msize = 0,
+ Opt_trans = 1,
+ Opt_legacy = 2,
+ Opt_version = 3,
+ Opt_err___6 = 4,
+};
+
+enum {
+ HANDSHAKE_NLGRP_NONE = 0,
+ HANDSHAKE_NLGRP_TLSHD = 1,
+};
+
+struct fdt_errtabent {
+ const char *str;
+};
+
+struct maple_metadata {
+ unsigned char end;
+ unsigned char gap;
+};
+
+struct maple_pnode;
+
+struct maple_range_64 {
+ struct maple_pnode *parent;
+ long unsigned int pivot[15];
+ union {
+ void *slot[16];
+ struct {
+ void *pad[15];
+ struct maple_metadata meta;
+ };
+ };
+};
+
+struct maple_arange_64 {
+ struct maple_pnode *parent;
+ long unsigned int pivot[9];
+ void *slot[10];
+ long unsigned int gap[10];
+ struct maple_metadata meta;
+};
+
+struct maple_topiary {
+ struct maple_pnode *parent;
+ struct maple_enode *next;
+};
+
+enum maple_type {
+ maple_dense = 0,
+ maple_leaf_64 = 1,
+ maple_range_64 = 2,
+ maple_arange_64 = 3,
+};
+
+struct maple_node {
+ union {
+ struct {
+ struct maple_pnode *parent;
+ void *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 ma_topiary {
+ struct maple_enode *head;
+ struct maple_enode *tail;
+ struct maple_tree *mtree;
+};
+
+struct ma_wr_state {
+ struct ma_state *mas;
+ struct maple_node *node;
+ long unsigned int r_min;
+ long unsigned int r_max;
+ enum maple_type type;
+ unsigned char offset_end;
+ long unsigned int *pivots;
+ long unsigned int end_piv;
+ void **slots;
+ void *entry;
+ void *content;
+};
+
+struct maple_big_node {
+ struct maple_pnode *parent;
+ long unsigned int pivot[33];
+ union {
+ struct maple_enode *slot[34];
+ struct {
+ long unsigned int padding[21];
+ long unsigned int gap[21];
+ };
+ };
+ unsigned char b_end;
+ enum maple_type type;
+};
+
+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 pt_alloc_ops {
+ pte_t * (*get_pte_virt)(phys_addr_t);
+ phys_addr_t (*alloc_pte)(uintptr_t);
+ pmd_t * (*get_pmd_virt)(phys_addr_t);
+ phys_addr_t (*alloc_pmd)(uintptr_t);
+ pud_t * (*get_pud_virt)(phys_addr_t);
+ phys_addr_t (*alloc_pud)(uintptr_t);
+ p4d_t * (*get_p4d_virt)(phys_addr_t);
+ phys_addr_t (*alloc_p4d)(uintptr_t);
+};
+
+enum {
+ KTW_FREEZABLE = 1,
+};
+
+struct kthread_delayed_work {
+ struct kthread_work work;
+ struct timer_list timer;
+};
+
+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 {
+ long unsigned int 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;
+};
+
+enum KTHREAD_BITS {
+ KTHREAD_IS_PER_CPU = 0,
+ KTHREAD_SHOULD_STOP = 1,
+ KTHREAD_SHOULD_PARK = 2,
+};
+
+struct kthread_flush_work {
+ struct kthread_work work;
+ struct completion done;
+};
+
+struct suspend_stats {
+ unsigned int step_failures[8];
+ unsigned int success;
+ unsigned int fail;
+ 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 irq_devres {
+ unsigned int irq;
+ void *dev_id;
+};
+
+struct irq_desc_devres {
+ unsigned int from;
+ unsigned int cnt;
+};
+
+struct dma_devres {
+ size_t size;
+ void *vaddr;
+ dma_addr_t dma_handle;
+ long unsigned int attrs;
+};
+
+struct kvm_debug_exit_arch {};
+
+struct kvm_sync_regs {};
+
+enum KVM_RISCV_SBI_EXT_ID {
+ KVM_RISCV_SBI_EXT_V01 = 0,
+ KVM_RISCV_SBI_EXT_TIME = 1,
+ KVM_RISCV_SBI_EXT_IPI = 2,
+ KVM_RISCV_SBI_EXT_RFENCE = 3,
+ KVM_RISCV_SBI_EXT_SRST = 4,
+ KVM_RISCV_SBI_EXT_HSM = 5,
+ KVM_RISCV_SBI_EXT_PMU = 6,
+ KVM_RISCV_SBI_EXT_EXPERIMENTAL = 7,
+ KVM_RISCV_SBI_EXT_VENDOR = 8,
+ KVM_RISCV_SBI_EXT_DBCN = 9,
+ KVM_RISCV_SBI_EXT_STA = 10,
+ KVM_RISCV_SBI_EXT_MAX = 11,
+};
+
+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_run {
+ __u8 request_interrupt_window;
+ __u8 immediate_exit__unsafe;
+ __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 phys_addr;
+ __u8 data[8];
+ __u32 len;
+ __u8 is_write;
+ } iocsr_io;
+ 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 {
+ long unsigned int extension_id;
+ long unsigned int function_id;
+ long unsigned int args[6];
+ long unsigned int ret[2];
+ } riscv_sbi;
+ struct {
+ long unsigned int csr_num;
+ long unsigned int new_value;
+ long unsigned int write_mask;
+ long unsigned int ret_value;
+ } riscv_csr;
+ struct {
+ __u32 flags;
+ } notify;
+ struct {
+ __u64 flags;
+ __u64 gpa;
+ __u64 size;
+ } memory_fault;
+ char padding[256];
+ };
+ __u64 kvm_valid_regs;
+ __u64 kvm_dirty_regs;
+ union {
+ struct kvm_sync_regs regs;
+ char padding[2048];
+ } s;
+};
+
+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_mp_state {
+ __u32 mp_state;
+};
+
+struct kvm_dirty_gfn {
+ __u32 flags;
+ __u32 slot;
+ __u64 offset;
+};
+
+struct kvm_stats_desc {
+ __u32 flags;
+ __s16 exponent;
+ __u16 size;
+ __u32 offset;
+ __u32 bucket_size;
+ char name[0];
+};
+
+typedef u64 gpa_t;
+
+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;
+ long unsigned int npages;
+ long unsigned int *dirty_bitmap;
+ struct kvm_arch_memory_slot arch;
+ long unsigned int userspace_addr;
+ u32 flags;
+ short int id;
+ u16 as_id;
+};
+
+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;
+};
+
+struct kvm_vmid {
+ long unsigned int vmid_version;
+ long unsigned int vmid;
+};
+
+struct kvm_guest_timer {
+ u32 nsec_mult;
+ u32 nsec_shift;
+ u64 time_delta;
+};
+
+struct kvm_aia {
+ bool in_kernel;
+ bool initialized;
+ u32 mode;
+ u32 nr_ids;
+ u32 nr_sources;
+ u32 nr_group_bits;
+ u32 nr_group_shift;
+ u32 nr_hart_bits;
+ u32 nr_guest_bits;
+ gpa_t aplic_addr;
+ void *aplic_state;
+};
+
+struct kvm_arch {
+ struct kvm_vmid vmid;
+ pgd_t *pgd;
+ phys_addr_t pgd_phys;
+ struct kvm_guest_timer timer;
+ struct kvm_aia aia;
+};
+
+struct kvm_io_bus;
+
+struct kvm_irq_routing_table;
+
+struct kvm_stat_data;
+
+struct kvm {
+ spinlock_t mmu_lock;
+ struct mutex slots_lock;
+ struct mutex slots_arch_lock;
+ struct mm_struct *mm;
+ long unsigned int nr_memslot_pages;
+ struct kvm_memslots __memslots[2];
+ struct kvm_memslots *memslots[1];
+ struct xarray vcpu_array;
+ atomic_t nr_memslots_dirty_logging;
+ spinlock_t mn_invalidate_lock;
+ long unsigned int 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 *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 *irq_routing;
+ struct hlist_head irq_ack_notifier_list;
+ struct mmu_notifier mmu_notifier;
+ long unsigned int mmu_invalidate_seq;
+ long int mmu_invalidate_in_progress;
+ gfn_t mmu_invalidate_range_start;
+ gfn_t 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_mmu_memory_cache {
+ gfp_t gfp_zero;
+ gfp_t gfp_custom;
+ u64 init_value;
+ struct kmem_cache *kmem_cache;
+ int capacity;
+ int nobjs;
+ void **objects;
+};
+
+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_aia_csr {
+ long unsigned int vsiselect;
+ long unsigned int hviprio1;
+ long unsigned int hviprio2;
+ long unsigned int vsieh;
+ long unsigned int hviph;
+ long unsigned int hviprio1h;
+ long unsigned int hviprio2h;
+};
+
+struct kvm_vcpu_aia {
+ struct kvm_vcpu_aia_csr guest_csr;
+ struct kvm_vcpu_aia_csr guest_reset_csr;
+ gpa_t imsic_addr;
+ u32 hart_index;
+ void *imsic_state;
+};
+
+struct kvm_mmio_decode {
+ long unsigned int insn;
+ int insn_len;
+ int len;
+ int shift;
+ int return_handled;
+};
+
+struct kvm_csr_decode {
+ long unsigned int insn;
+ int return_handled;
+};
+
+enum kvm_riscv_sbi_ext_status {
+ KVM_RISCV_SBI_EXT_STATUS_UNINITIALIZED = 0,
+ KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE = 1,
+ KVM_RISCV_SBI_EXT_STATUS_ENABLED = 2,
+ KVM_RISCV_SBI_EXT_STATUS_DISABLED = 3,
+};
+
+struct kvm_vcpu_sbi_context {
+ int return_handled;
+ enum kvm_riscv_sbi_ext_status ext_status[11];
+};
+
+struct kvm_mmio_fragment {
+ gpa_t gpa;
+ void *data;
+ unsigned int len;
+};
+
+struct kvm_cpu_context {
+ long unsigned int zero;
+ long unsigned int ra;
+ long unsigned int sp;
+ long unsigned int gp;
+ long unsigned int tp;
+ long unsigned int t0;
+ long unsigned int t1;
+ long unsigned int t2;
+ long unsigned int s0;
+ long unsigned int s1;
+ long unsigned int a0;
+ long unsigned int a1;
+ long unsigned int a2;
+ long unsigned int a3;
+ long unsigned int a4;
+ long unsigned int a5;
+ long unsigned int a6;
+ long unsigned int a7;
+ long unsigned int s2;
+ long unsigned int s3;
+ long unsigned int s4;
+ long unsigned int s5;
+ long unsigned int s6;
+ long unsigned int s7;
+ long unsigned int s8;
+ long unsigned int s9;
+ long unsigned int s10;
+ long unsigned int s11;
+ long unsigned int t3;
+ long unsigned int t4;
+ long unsigned int t5;
+ long unsigned int t6;
+ long unsigned int sepc;
+ long unsigned int sstatus;
+ long unsigned int hstatus;
+ long: 64;
+ union __riscv_fp_state fp;
+ struct __riscv_v_ext_state vector;
+};
+
+struct kvm_vcpu_csr {
+ long unsigned int vsstatus;
+ long unsigned int vsie;
+ long unsigned int vstvec;
+ long unsigned int vsscratch;
+ long unsigned int vsepc;
+ long unsigned int vscause;
+ long unsigned int vstval;
+ long unsigned int hvip;
+ long unsigned int vsatp;
+ long unsigned int scounteren;
+ long unsigned int senvcfg;
+};
+
+struct kvm_vcpu_smstateen_csr {
+ long unsigned int sstateen0;
+};
+
+struct kvm_vcpu;
+
+struct kvm_vcpu_timer {
+ bool init_done;
+ bool next_set;
+ u64 next_cycles;
+ struct hrtimer hrt;
+ bool sstc_enabled;
+ int (*timer_next_event)(struct kvm_vcpu *, u64);
+};
+
+enum kvm_riscv_hfence_type {
+ KVM_RISCV_HFENCE_UNKNOWN = 0,
+ KVM_RISCV_HFENCE_GVMA_VMID_GPA = 1,
+ KVM_RISCV_HFENCE_VVMA_ASID_GVA = 2,
+ KVM_RISCV_HFENCE_VVMA_ASID_ALL = 3,
+ KVM_RISCV_HFENCE_VVMA_GVA = 4,
+};
+
+struct kvm_riscv_hfence {
+ enum kvm_riscv_hfence_type type;
+ long unsigned int asid;
+ long unsigned int order;
+ gpa_t addr;
+ gpa_t size;
+};
+
+struct kvm_pmc {
+ u8 idx;
+ struct perf_event *perf_event;
+ u64 counter_val;
+ union sbi_pmu_ctr_info cinfo;
+ bool started;
+ long unsigned int event_idx;
+ struct kvm_vcpu *vcpu;
+};
+
+struct kvm_fw_event {
+ u64 value;
+ bool started;
+};
+
+struct kvm_pmu {
+ struct kvm_pmc pmc[64];
+ struct kvm_fw_event fw_event[32];
+ int num_fw_ctrs;
+ int num_hw_ctrs;
+ bool init_done;
+ long unsigned int pmc_in_use[1];
+ long unsigned int pmc_overflown[1];
+ gpa_t snapshot_addr;
+ struct riscv_pmu_snapshot_data *sdata;
+};
+
+struct kvm_vcpu_config {
+ u64 henvcfg;
+ u64 hstateen0;
+ long unsigned int hedeleg;
+};
+
+struct kvm_vcpu_arch {
+ bool ran_atleast_once;
+ int last_exit_cpu;
+ long unsigned int isa[2];
+ long unsigned int mvendorid;
+ long unsigned int marchid;
+ long unsigned int mimpid;
+ long unsigned int host_sscratch;
+ long unsigned int host_stvec;
+ long unsigned int host_scounteren;
+ long unsigned int host_senvcfg;
+ long unsigned int host_sstateen0;
+ long: 64;
+ struct kvm_cpu_context host_context;
+ struct kvm_cpu_context guest_context;
+ struct kvm_vcpu_csr guest_csr;
+ struct kvm_vcpu_smstateen_csr smstateen_csr;
+ struct kvm_cpu_context guest_reset_context;
+ spinlock_t reset_cntx_lock;
+ struct kvm_vcpu_csr guest_reset_csr;
+ long unsigned int irqs_pending[1];
+ long unsigned int irqs_pending_mask[1];
+ struct kvm_vcpu_timer timer;
+ spinlock_t hfence_lock;
+ long unsigned int hfence_head;
+ long unsigned int hfence_tail;
+ struct kvm_riscv_hfence hfence_queue[64];
+ struct kvm_mmio_decode mmio_decode;
+ struct kvm_csr_decode csr_decode;
+ struct kvm_vcpu_sbi_context sbi_context;
+ struct kvm_vcpu_aia aia_context;
+ struct kvm_mmu_memory_cache mmu_page_cache;
+ struct kvm_mp_state mp_state;
+ spinlock_t mp_state_lock;
+ bool pause;
+ struct kvm_pmu pmu_context;
+ struct kvm_vcpu_config cfg;
+ struct {
+ gpa_t shmem;
+ u64 last_steal;
+ } sta;
+};
+
+struct kvm_vcpu_stat {
+ struct kvm_vcpu_stat_generic generic;
+ u64 ecall_exit_stat;
+ u64 wfi_exit_stat;
+ u64 wrs_exit_stat;
+ u64 mmio_exit_user;
+ u64 mmio_exit_kernel;
+ u64 csr_exit_user;
+ u64 csr_exit_kernel;
+ u64 signal_exits;
+ u64 exits;
+};
+
+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_vcpu {
+ struct kvm *kvm;
+ struct preempt_notifier preempt_notifier;
+ int cpu;
+ int vcpu_id;
+ int vcpu_idx;
+ int ____srcu_idx;
+ int mode;
+ u64 requests;
+ long unsigned int guest_debug;
+ struct mutex mutex;
+ struct kvm_run *run;
+ struct rcuwait wait;
+ struct pid *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];
+ bool wants_to_run;
+ bool preempted;
+ bool ready;
+ bool scheduled_out;
+ 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_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];
+};
+
+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,
+};
+
+struct kvm_irq_routing_table {
+ int chip[1024];
+ u32 nr_rt_entries;
+ struct hlist_head map[0];
+};
+
+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 {
+ struct kvm_stats_desc desc;
+ char name[48];
+};
+
+struct stacktrace_cookie {
+ long unsigned int *store;
+ unsigned int size;
+ unsigned int skip;
+ unsigned int len;
+};
+
+struct clock_data {
+ seqcount_latch_t seq;
+ struct clock_read_data read_data[2];
+ ktime_t wrap_kt;
+ long unsigned int rate;
+ u64 (*actual_read_sched_clock)();
+};
+
+enum cgroup_opt_features {
+ OPT_FEATURE_COUNT = 0,
+};
+
+enum cgroup2_param {
+ Opt_nsdelegate = 0,
+ Opt_favordynmods___2 = 1,
+ Opt_memory_localevents = 2,
+ Opt_memory_recursiveprot = 3,
+ Opt_memory_hugetlb_accounting = 4,
+ Opt_pids_localevents = 5,
+ nr__cgroup2_params = 6,
+};
+
+struct bpf_iter_seq_link_info {
+ u32 link_id;
+};
+
+struct bpf_iter__bpf_link {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct bpf_link *link;
+ };
+};
+
+struct bpf_cgroup_storage_map {
+ struct bpf_map map;
+ spinlock_t lock;
+ struct rb_root root;
+ struct list_head list;
+};
+
+struct bpf_arena {
+ struct bpf_map map;
+ u64 user_vm_start;
+ u64 user_vm_end;
+ struct vm_struct *kern_vm;
+ struct maple_tree mt;
+ struct list_head vma_list;
+ struct mutex lock;
+};
+
+struct vma_list {
+ struct vm_area_struct *vma;
+ struct list_head head;
+ atomic_t mmap_count;
+};
+
+struct bpf_iter__cgroup {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct cgroup *cgroup;
+ };
+};
+
+struct cgroup_iter_priv {
+ struct cgroup_subsys_state *start_css;
+ bool visited_all;
+ bool terminate;
+ int order;
+};
+
+struct bpf_iter_css {
+ __u64 __opaque[3];
+};
+
+struct bpf_iter_css_kern {
+ struct cgroup_subsys_state *start;
+ struct cgroup_subsys_state *pos;
+ unsigned int flags;
+};
+
+enum perf_event_task_context {
+ perf_invalid_context = -1,
+ perf_hw_context = 0,
+ perf_sw_context = 1,
+ perf_nr_task_contexts = 2,
+};
+
+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_COUNTERS = 524288,
+ PERF_SAMPLE_BRANCH_MAX = 1048576,
+};
+
+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_event_ioc_flags {
+ PERF_IOC_FLAG_GROUP = 1,
+};
+
+struct perf_ns_link_info {
+ __u64 dev;
+ __u64 ino;
+};
+
+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_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,
+};
+
+enum perf_pmu_scope {
+ PERF_PMU_SCOPE_NONE = 0,
+ PERF_PMU_SCOPE_CORE = 1,
+ PERF_PMU_SCOPE_DIE = 2,
+ PERF_PMU_SCOPE_CLUSTER = 3,
+ PERF_PMU_SCOPE_PKG = 4,
+ PERF_PMU_SCOPE_SYS_WIDE = 5,
+ PERF_PMU_MAX_SCOPE = 6,
+};
+
+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 perf_addr_filter {
+ struct list_head entry;
+ struct path path;
+ long unsigned int offset;
+ long unsigned int size;
+ enum perf_addr_filter_action_t action;
+};
+
+struct swevent_hlist {
+ struct hlist_head heads[256];
+ struct callback_head callback_head;
+};
+
+struct pmu_event_list {
+ raw_spinlock_t lock;
+ struct list_head list;
+};
+
+struct perf_cpu_context {
+ struct perf_event_context ctx;
+ struct perf_event_context *task_ctx;
+ int online;
+ struct perf_cgroup *cgrp;
+ int heap_size;
+ struct perf_event **heap;
+ struct perf_event *heap_default[2];
+};
+
+struct min_heap_char {
+ int nr;
+ int size;
+ char *data;
+ char preallocated[0];
+};
+
+typedef struct min_heap_char min_heap_char;
+
+struct min_heap_callbacks {
+ bool (*less)(const void *, const void *, void *);
+ void (*swp)(void *, void *, void *);
+};
+
+typedef int (*remote_function_f)(void *);
+
+struct remote_function_call {
+ struct task_struct *p;
+ remote_function_f func;
+ void *info;
+ int ret;
+};
+
+enum event_type_t {
+ EVENT_FLEXIBLE = 1,
+ EVENT_PINNED = 2,
+ EVENT_TIME = 4,
+ EVENT_FROZEN = 8,
+ EVENT_CPU = 16,
+ EVENT_CGROUP = 32,
+ EVENT_ALL = 3,
+ EVENT_TIME_FROZEN = 12,
+};
+
+typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *);
+
+struct event_function_struct {
+ struct perf_event *event;
+ event_f func;
+ void *data;
+};
+
+struct __group_key {
+ int cpu;
+ struct pmu *pmu;
+ struct cgroup *cgroup;
+};
+
+struct stop_event_data {
+ struct perf_event *event;
+ unsigned int restart;
+};
+
+struct perf_event_min_heap {
+ int nr;
+ int size;
+ struct perf_event **data;
+ struct perf_event *preallocated[0];
+};
+
+struct perf_read_data {
+ struct perf_event *event;
+ bool group;
+ int ret;
+};
+
+struct perf_read_event {
+ struct perf_event_header header;
+ u32 pid;
+ u32 tid;
+};
+
+typedef void perf_iterate_f(struct perf_event *, void *);
+
+struct remote_output {
+ struct perf_buffer *rb;
+ int err;
+};
+
+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_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_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_cgroup_event {
+ char *path;
+ int path_size;
+ struct {
+ struct perf_event_header header;
+ u64 id;
+ char path[0];
+ } 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_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;
+};
+
+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 swevent_htable {
+ struct swevent_hlist *swevent_hlist;
+ struct mutex hlist_mutex;
+ int hlist_refcount;
+};
+
+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,
+};
+
+enum {
+ IF_STATE_ACTION = 0,
+ IF_STATE_SOURCE = 1,
+ IF_STATE_END = 2,
+};
+
+struct perf_aux_event {
+ struct perf_event_header header;
+ u64 hw_id;
+};
+
+struct perf_aux_event___2 {
+ struct perf_event_header header;
+ u32 pid;
+ u32 tid;
+};
+
+struct perf_aux_event___3 {
+ struct perf_event_header header;
+ u64 offset;
+ u64 size;
+ u64 flags;
+};
+
+struct shmem_quota_limits {
+ qsize_t usrquota_bhardlimit;
+ qsize_t usrquota_ihardlimit;
+ qsize_t grpquota_bhardlimit;
+ qsize_t grpquota_ihardlimit;
+};
+
+struct shmem_sb_info {
+ long unsigned int max_blocks;
+ struct percpu_counter used_blocks;
+ long unsigned int max_inodes;
+ long unsigned int 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 *ino_batch;
+ struct mempolicy *mpol;
+ spinlock_t shrinklist_lock;
+ struct list_head shrinklist;
+ long unsigned int shrinklist_len;
+ struct shmem_quota_limits qlimits;
+};
+
+enum sgp_type {
+ SGP_READ = 0,
+ SGP_NOALLOC = 1,
+ SGP_CACHE = 2,
+ SGP_WRITE = 3,
+ SGP_FALLOC = 4,
+};
+
+struct shmem_falloc {
+ wait_queue_head_t *waitq;
+ long unsigned int start;
+ long unsigned int next;
+ long unsigned int nr_falloced;
+ long unsigned int nr_unswapped;
+};
+
+struct shmem_options {
+ long long unsigned int blocks;
+ long long unsigned int inodes;
+ struct mempolicy *mpol;
+ kuid_t uid;
+ kgid_t gid;
+ umode_t mode;
+ bool full_inums;
+ int huge;
+ int seen;
+ bool noswap;
+ short unsigned int quota_types;
+ struct shmem_quota_limits qlimits;
+};
+
+enum shmem_param {
+ Opt_gid___8 = 0,
+ Opt_huge = 1,
+ Opt_mode___6 = 2,
+ Opt_mpol = 3,
+ Opt_nr_blocks = 4,
+ Opt_nr_inodes___2 = 5,
+ Opt_size___2 = 6,
+ Opt_uid___7 = 7,
+ Opt_inode32 = 8,
+ Opt_inode64 = 9,
+ Opt_noswap = 10,
+ Opt_quota___2 = 11,
+ Opt_usrquota___2 = 12,
+ Opt_grpquota___2 = 13,
+ Opt_usrquota_block_hardlimit = 14,
+ Opt_usrquota_inode_hardlimit = 15,
+ Opt_grpquota_block_hardlimit = 16,
+ Opt_grpquota_inode_hardlimit = 17,
+};
+
+struct list_lru_memcg {
+ struct callback_head rcu;
+ struct list_lru_one node[0];
+};
+
+struct list_lru_memcg_table {
+ struct list_lru_memcg *mlru;
+ struct mem_cgroup *memcg;
+};
+
+struct follow_pfnmap_args {
+ struct vm_area_struct *vma;
+ long unsigned int address;
+ spinlock_t *lock;
+ pte_t *ptep;
+ long unsigned int pfn;
+ pgprot_t pgprot;
+ bool writable;
+ bool special;
+};
+
+struct copy_subpage_arg {
+ struct folio *dst;
+ struct folio *src;
+ struct vm_area_struct *vma;
+};
+
+struct swap_iocb {
+ struct kiocb iocb;
+ struct bio_vec bvec[32];
+ int pages;
+ int len;
+};
+
+struct vmemmap_remap_walk {
+ void (*remap_pte)(pte_t *, long unsigned int, struct vmemmap_remap_walk *);
+ long unsigned int nr_walked;
+ struct page *reuse_page;
+ long unsigned int reuse_addr;
+ struct list_head *vmemmap_pages;
+ long unsigned int flags;
+};
+
+enum {
+ RES_USAGE = 0,
+ RES_RSVD_USAGE = 1,
+ RES_LIMIT = 2,
+ RES_RSVD_LIMIT = 3,
+ RES_MAX_USAGE = 4,
+ RES_RSVD_MAX_USAGE = 5,
+ RES_FAILCNT = 6,
+ RES_RSVD_FAILCNT = 7,
+};
+
+struct files_stat_struct {
+ long unsigned int nr_files;
+ long unsigned int nr_free_files;
+ long unsigned int max_files;
+};
+
+struct backing_file {
+ struct file file;
+ struct path user_path;
+};
+
+struct f_owner_ex {
+ int type;
+ __kernel_pid_t pid;
+};
+
+struct compat_flock {
+ short int l_type;
+ short int l_whence;
+ compat_off_t l_start;
+ compat_off_t l_len;
+ compat_pid_t l_pid;
+};
+
+struct compat_flock64 {
+ short int l_type;
+ short int l_whence;
+ compat_loff_t l_start;
+ compat_loff_t l_len;
+ compat_pid_t l_pid;
+};
+
+typedef struct {
+ rwlock_t *lock;
+} class_read_lock_t;
+
+typedef struct {
+ rwlock_t *lock;
+} class_write_lock_t;
+
+struct mount_attr {
+ __u64 attr_set;
+ __u64 attr_clr;
+ __u64 propagation;
+ __u64 userns_fd;
+};
+
+struct statmount {
+ __u32 size;
+ __u32 mnt_opts;
+ __u64 mask;
+ __u32 sb_dev_major;
+ __u32 sb_dev_minor;
+ __u64 sb_magic;
+ __u32 sb_flags;
+ __u32 fs_type;
+ __u64 mnt_id;
+ __u64 mnt_parent_id;
+ __u32 mnt_id_old;
+ __u32 mnt_parent_id_old;
+ __u64 mnt_attr;
+ __u64 mnt_propagation;
+ __u64 mnt_peer_group;
+ __u64 mnt_master;
+ __u64 propagate_from;
+ __u32 mnt_root;
+ __u32 mnt_point;
+ __u64 mnt_ns_id;
+ __u64 __spare2[49];
+ char str[0];
+};
+
+struct mnt_id_req {
+ __u32 size;
+ __u32 spare;
+ __u64 mnt_id;
+ __u64 param;
+ __u64 mnt_ns_id;
+};
+
+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;
+};
+
+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 kstatmount {
+ struct statmount *buf;
+ size_t bufsize;
+ struct vfsmount *mnt;
+ u64 mask;
+ struct path root;
+ struct statmount sm;
+ struct seq_file seq;
+};
+
+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 mnt_idmap {
+ struct uid_gid_map uid_map;
+ struct uid_gid_map gid_map;
+ refcount_t count;
+};
+
+struct postprocess_bh_ctx {
+ struct work_struct work;
+ struct buffer_head *bh;
+};
+
+struct bh_lru {
+ struct buffer_head *bhs[16];
+};
+
+struct bh_accounting {
+ int nr;
+ int ratelimit;
+};
+
+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;
+ short unsigned int expired;
+ short unsigned int settime_flags;
+ struct callback_head rcu;
+ struct list_head clist;
+ spinlock_t cancel_lock;
+ bool might_cancel;
+};
+
+struct mb_cache {
+ struct hlist_bl_head *c_hash;
+ int c_bucket_bits;
+ long unsigned int c_max_entries;
+ spinlock_t c_list_lock;
+ struct list_head c_list;
+ long unsigned int c_entry_count;
+ struct shrinker *c_shrink;
+ struct work_struct c_shrink_work;
+};
+
+typedef void (*iomap_punch_t)(struct inode *, loff_t, loff_t, struct iomap *);
+
+struct iomap_ioend {
+ struct list_head io_list;
+ u16 io_type;
+ u16 io_flags;
+ struct inode *io_inode;
+ size_t io_size;
+ loff_t io_offset;
+ sector_t io_sector;
+ struct bio io_bio;
+};
+
+struct iomap_writepage_ctx;
+
+struct iomap_writeback_ops {
+ int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t, unsigned int);
+ int (*prepare_ioend)(struct iomap_ioend *, int);
+ void (*discard_folio)(struct folio *, loff_t);
+};
+
+struct iomap_writepage_ctx {
+ struct iomap iomap;
+ struct iomap_ioend *ioend;
+ const struct iomap_writeback_ops *ops;
+ u32 nr_folios;
+};
+
+struct iomap_folio_state {
+ spinlock_t state_lock;
+ unsigned int read_bytes_pending;
+ atomic_t write_bytes_pending;
+ long unsigned int state[0];
+};
+
+struct iomap_readpage_ctx {
+ struct folio *cur_folio;
+ bool cur_folio_in_bio;
+ struct bio *bio;
+ struct readahead_control *rac;
+};
+
+struct fd_data {
+ fmode_t mode;
+ unsigned int fd;
+};
+
+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_getfsmap_dev {
+ int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
+ u32 gfd_dev;
+};
+
+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;
+};
+
+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 {
+ 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_clusters_in_group = 10,
+ attr_mb_order = 11,
+ attr_feature = 12,
+ attr_pointer_pi = 13,
+ attr_pointer_ui = 14,
+ attr_pointer_ul = 15,
+ attr_pointer_u64 = 16,
+ attr_pointer_u8 = 17,
+ attr_pointer_string = 18,
+ attr_pointer_atomic = 19,
+ attr_journal_task = 20,
+};
+
+enum {
+ ptr_explicit = 0,
+ ptr_ext4_sb_info_offset = 1,
+ ptr_ext4_super_block_offset = 2,
+};
+
+struct ext4_attr {
+ struct attribute attr;
+ short int attr_id;
+ short int attr_ptr;
+ short unsigned int attr_size;
+ union {
+ int offset;
+ void *explicit_ptr;
+ } u;
+};
+
+typedef struct {
+ __le16 e_tag;
+ __le16 e_perm;
+ __le32 e_id;
+} ext4_acl_entry;
+
+typedef struct {
+ __le32 a_version;
+} ext4_acl_header;
+
+struct jbd2_stats_proc_session {
+ journal_t *journal;
+ struct transaction_stats_s *stats;
+ int start;
+ int max;
+};
+
+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 SU_SP_s {
+ __u8 magic[2];
+ __u8 skip;
+};
+
+struct SU_CE_s {
+ __u8 extent[8];
+ __u8 offset[8];
+ __u8 size[8];
+};
+
+struct SU_ER_s {
+ __u8 len_id;
+ __u8 len_des;
+ __u8 len_src;
+ __u8 ext_ver;
+ __u8 data[0];
+};
+
+struct RR_RR_s {
+ __u8 flags[1];
+};
+
+struct RR_PX_s {
+ __u8 mode[8];
+ __u8 n_links[8];
+ __u8 uid[8];
+ __u8 gid[8];
+};
+
+struct RR_PN_s {
+ __u8 dev_high[8];
+ __u8 dev_low[8];
+};
+
+struct SL_component {
+ __u8 flags;
+ __u8 len;
+ __u8 text[0];
+};
+
+struct RR_SL_s {
+ __u8 flags;
+ struct SL_component link;
+};
+
+struct RR_NM_s {
+ __u8 flags;
+ char name[0];
+};
+
+struct RR_CL_s {
+ __u8 location[8];
+};
+
+struct RR_PL_s {
+ __u8 location[8];
+};
+
+struct stamp {
+ __u8 time[7];
+};
+
+struct RR_TF_s {
+ __u8 flags;
+ struct stamp times[0];
+};
+
+struct RR_ZF_s {
+ __u8 algorithm[2];
+ __u8 parms[2];
+ __u8 real_size[8];
+};
+
+struct rock_ridge {
+ __u8 signature[2];
+ __u8 len;
+ __u8 version;
+ union {
+ struct SU_SP_s SP;
+ struct SU_CE_s CE;
+ struct SU_ER_s ER;
+ struct RR_RR_s RR;
+ struct RR_PX_s PX;
+ struct RR_PN_s PN;
+ struct RR_SL_s SL;
+ struct RR_NM_s NM;
+ struct RR_CL_s CL;
+ struct RR_PL_s PL;
+ struct RR_TF_s TF;
+ struct RR_ZF_s ZF;
+ } u;
+};
+
+struct rock_state {
+ void *buffer;
+ unsigned char *chr;
+ int len;
+ int cont_size;
+ int cont_extent;
+ int cont_offset;
+ int cont_loops;
+ struct inode *inode;
+};
+
+struct nfs_find_desc {
+ struct nfs_fh *fh;
+ struct nfs_fattr *fattr;
+};
+
+enum {
+ MOUNTPROC_NULL = 0,
+ MOUNTPROC_MNT = 1,
+ MOUNTPROC_DUMP = 2,
+ MOUNTPROC_UMNT = 3,
+ MOUNTPROC_UMNTALL = 4,
+ MOUNTPROC_EXPORT = 5,
+};
+
+enum {
+ MOUNTPROC3_NULL = 0,
+ MOUNTPROC3_MNT = 1,
+ MOUNTPROC3_DUMP = 2,
+ MOUNTPROC3_UMNT = 3,
+ MOUNTPROC3_UMNTALL = 4,
+ MOUNTPROC3_EXPORT = 5,
+};
+
+enum mountstat {
+ MNT_OK = 0,
+ MNT_EPERM = 1,
+ MNT_ENOENT = 2,
+ MNT_EACCES = 13,
+ MNT_EINVAL = 22,
+};
+
+enum mountstat3 {
+ MNT3_OK = 0,
+ MNT3ERR_PERM = 1,
+ MNT3ERR_NOENT = 2,
+ MNT3ERR_IO = 5,
+ MNT3ERR_ACCES = 13,
+ MNT3ERR_NOTDIR = 20,
+ MNT3ERR_INVAL = 22,
+ MNT3ERR_NAMETOOLONG = 63,
+ MNT3ERR_NOTSUPP = 10004,
+ MNT3ERR_SERVERFAULT = 10006,
+};
+
+struct mountres {
+ int errno;
+ struct nfs_fh *fh;
+ unsigned int *auth_count;
+ rpc_authflavor_t *auth_flavors;
+};
+
+struct nfs3_createdata {
+ struct rpc_message msg;
+ union {
+ struct nfs3_createargs create;
+ struct nfs3_mkdirargs mkdir;
+ struct nfs3_symlinkargs symlink;
+ struct nfs3_mknodargs mknod;
+ } arg;
+ struct nfs3_diropres res;
+ struct nfs_fh fh;
+ struct nfs_fattr fattr;
+ struct nfs_fattr dir_attr;
+};
+
+struct nfs4_ds_server {
+ struct list_head list;
+ struct rpc_clnt *rpc_clnt;
+};
+
+struct nfs4_xattr_bucket {
+ spinlock_t lock;
+ struct hlist_head hlist;
+ struct nfs4_xattr_cache *cache;
+ bool draining;
+};
+
+struct nfs4_xattr_entry;
+
+struct nfs4_xattr_cache {
+ struct kref ref;
+ struct nfs4_xattr_bucket buckets[64];
+ struct list_head lru;
+ struct list_head dispose;
+ atomic_long_t nent;
+ spinlock_t listxattr_lock;
+ struct inode *inode;
+ struct nfs4_xattr_entry *listxattr;
+};
+
+struct nfs4_xattr_entry {
+ struct kref ref;
+ struct hlist_node hnode;
+ struct list_head lru;
+ struct list_head dispose;
+ char *xattr_name;
+ void *xattr_value;
+ size_t xattr_size;
+ struct nfs4_xattr_bucket *bucket;
+ uint32_t flags;
+};
+
+typedef long unsigned int (*count_objects_cb)(struct shrinker *, struct shrink_control *);
+
+typedef long unsigned int (*scan_objects_cb)(struct shrinker *, struct shrink_control *);
+
+enum {
+ NSMPROC_NULL = 0,
+ NSMPROC_STAT = 1,
+ NSMPROC_MON = 2,
+ NSMPROC_UNMON = 3,
+ NSMPROC_UNMON_ALL = 4,
+ NSMPROC_SIMU_CRASH = 5,
+ NSMPROC_NOTIFY = 6,
+};
+
+struct nsm_args {
+ struct nsm_private *priv;
+ u32 prog;
+ u32 vers;
+ u32 proc;
+ char *mon_name;
+ const char *nodename;
+};
+
+struct nsm_res {
+ u32 status;
+ u32 state;
+};
+
+struct compat_shmid64_ds {
+ struct compat_ipc64_perm shm_perm;
+ compat_size_t shm_segsz;
+ compat_ulong_t shm_atime;
+ compat_ulong_t shm_atime_high;
+ compat_ulong_t shm_dtime;
+ compat_ulong_t shm_dtime_high;
+ compat_ulong_t shm_ctime;
+ compat_ulong_t shm_ctime_high;
+ compat_pid_t shm_cpid;
+ compat_pid_t shm_lpid;
+ compat_ulong_t shm_nattch;
+ compat_ulong_t __unused4;
+ compat_ulong_t __unused5;
+};
+
+struct shmid_ds {
+ struct ipc_perm shm_perm;
+ int shm_segsz;
+ __kernel_old_time_t shm_atime;
+ __kernel_old_time_t shm_dtime;
+ __kernel_old_time_t shm_ctime;
+ __kernel_ipc_pid_t shm_cpid;
+ __kernel_ipc_pid_t shm_lpid;
+ short unsigned int shm_nattch;
+ short unsigned int shm_unused;
+ void *shm_unused2;
+ void *shm_unused3;
+};
+
+struct shmid64_ds {
+ struct ipc64_perm shm_perm;
+ __kernel_size_t shm_segsz;
+ long int shm_atime;
+ long int shm_dtime;
+ long int shm_ctime;
+ __kernel_pid_t shm_cpid;
+ __kernel_pid_t shm_lpid;
+ long unsigned int shm_nattch;
+ long unsigned int __unused4;
+ long unsigned int __unused5;
+};
+
+struct shminfo64 {
+ long unsigned int shmmax;
+ long unsigned int shmmin;
+ long unsigned int shmmni;
+ long unsigned int shmseg;
+ long unsigned int shmall;
+ long unsigned int __unused1;
+ long unsigned int __unused2;
+ long unsigned int __unused3;
+ long unsigned int __unused4;
+};
+
+struct shminfo {
+ int shmmax;
+ int shmmin;
+ int shmmni;
+ int shmseg;
+ int shmall;
+};
+
+struct shm_info {
+ int used_ids;
+ __kernel_ulong_t shm_tot;
+ __kernel_ulong_t shm_rss;
+ __kernel_ulong_t shm_swp;
+ __kernel_ulong_t swap_attempts;
+ __kernel_ulong_t swap_successes;
+};
+
+struct shmid_kernel {
+ struct kern_ipc_perm shm_perm;
+ struct file *shm_file;
+ long unsigned int shm_nattch;
+ long unsigned int shm_segsz;
+ time64_t shm_atim;
+ time64_t shm_dtim;
+ time64_t shm_ctim;
+ struct pid *shm_cprid;
+ struct pid *shm_lprid;
+ struct ucounts *mlock_ucounts;
+ struct task_struct *shm_creator;
+ struct list_head shm_clist;
+ struct ipc_namespace *ns;
+ long: 64;
+ long: 64;
+ long: 64;
+};
+
+struct shm_file_data {
+ int id;
+ struct ipc_namespace *ns;
+ struct file *file;
+ const struct vm_operations_struct *vm_ops;
+};
+
+struct compat_shmid_ds {
+ struct compat_ipc_perm shm_perm;
+ int shm_segsz;
+ old_time32_t shm_atime;
+ old_time32_t shm_dtime;
+ old_time32_t shm_ctime;
+ compat_ipc_pid_t shm_cpid;
+ compat_ipc_pid_t shm_lpid;
+ short unsigned int shm_nattch;
+ short unsigned int shm_unused;
+ compat_uptr_t shm_unused2;
+ compat_uptr_t shm_unused3;
+};
+
+struct compat_shminfo64 {
+ compat_ulong_t shmmax;
+ compat_ulong_t shmmin;
+ compat_ulong_t shmmni;
+ compat_ulong_t shmseg;
+ compat_ulong_t shmall;
+ compat_ulong_t __unused1;
+ compat_ulong_t __unused2;
+ compat_ulong_t __unused3;
+ compat_ulong_t __unused4;
+};
+
+struct compat_shm_info {
+ compat_int_t used_ids;
+ compat_ulong_t shm_tot;
+ compat_ulong_t shm_rss;
+ compat_ulong_t shm_swp;
+ compat_ulong_t swap_attempts;
+ compat_ulong_t swap_successes;
+};
+
+struct selinux_mapping;
+
+struct selinux_map {
+ struct selinux_mapping *mapping;
+ u16 size;
+};
+
+struct selinux_policy {
+ struct sidtab *sidtab;
+ struct policydb policydb;
+ struct selinux_map map;
+ u32 latest_granting;
+};
+
+struct selinux_policy_convert_data {
+ struct convert_context_args args;
+ struct sidtab_convert_params sidtab_params;
+};
+
+struct selinux_mapping {
+ u16 value;
+ u16 num_perms;
+ u32 perms[32];
+};
+
+struct selinux_audit_rule {
+ u32 au_seqno;
+ struct context au_ctxt;
+};
+
+struct match_workbuf {
+ unsigned int count;
+ unsigned int pos;
+ unsigned int len;
+ unsigned int size;
+ unsigned int history[24];
+};
+
+struct crypto_comp {
+ struct crypto_tfm base;
+};
+
+struct aead_instance {
+ void (*free)(struct aead_instance *);
+ union {
+ struct {
+ char head[64];
+ struct crypto_instance base;
+ } s;
+ struct aead_alg alg;
+ };
+};
+
+struct crypto_aead_spawn {
+ struct crypto_spawn base;
+};
+
+struct rsa_asn1_template {
+ const char *name;
+ const u8 *data;
+ size_t size;
+};
+
+struct pkcs1pad_ctx {
+ struct crypto_akcipher *child;
+ unsigned int key_size;
+};
+
+struct pkcs1pad_inst_ctx {
+ struct crypto_akcipher_spawn spawn;
+ const struct rsa_asn1_template *digest_info;
+};
+
+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 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 queue_sysfs_entry {
+ struct attribute attr;
+ ssize_t (*show)(struct gendisk *, char *);
+ int (*load_module)(struct gendisk *, const char *, size_t);
+ ssize_t (*store)(struct gendisk *, const char *, size_t);
+};
+
+struct blk_major_name {
+ struct blk_major_name *next;
+ int major;
+ char name[16];
+ void (*probe)(dev_t);
+};
+
+struct blk_ia_range_sysfs_entry {
+ struct attribute attr;
+ ssize_t (*show)(struct blk_independent_access_range *, char *);
+};
+
+struct io_uring_getevents_arg {
+ __u64 sigmask;
+ __u32 sigmask_sz;
+ __u32 min_wait_usec;
+ __u64 ts;
+};
+
+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 cq_min_tail;
+ unsigned int nr_timeouts;
+ int hit_timeout;
+ ktime_t min_timeout;
+ ktime_t timeout;
+ struct hrtimer t;
+ ktime_t napi_busy_poll_dt;
+ bool napi_prefer_busy_poll;
+};
+
+enum {
+ IO_CHECK_CQ_OVERFLOW_BIT = 0,
+ IO_CHECK_CQ_DROPPED_BIT = 1,
+};
+
+struct io_defer_entry {
+ struct list_head list;
+ struct io_kiocb *req;
+ u32 seq;
+};
+
+struct ext_arg {
+ size_t argsz;
+ struct __kernel_timespec *ts;
+ const sigset_t *sig;
+ ktime_t min_time;
+};
+
+struct io_tctx_exit {
+ struct callback_head task_work;
+ struct completion completion;
+ struct io_ring_ctx *ctx;
+};
+
+struct io_task_cancel {
+ struct task_struct *task;
+ bool all;
+};
+
+struct creds;
+
+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_uring_napi {
+ __u32 busy_poll_to;
+ __u8 prefer_busy_poll;
+ __u8 pad[3];
+ __u64 resv;
+};
+
+struct io_napi_entry {
+ unsigned int napi_id;
+ struct list_head list;
+ long unsigned int timeout;
+ struct hlist_node node;
+ struct callback_head rcu;
+};
+
+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;
+ long unsigned int sc_segments;
+ long unsigned int dissimilarity;
+ } wrong_shortcut;
+};
+
+struct assoc_array_delete_collapse_context {
+ struct assoc_array_node *node;
+ const void *skip_leaf;
+ int slot;
+};
+
+typedef ZSTD_CDict zstd_cdict;
+
+typedef ZSTD_CStream zstd_cstream;
+
+typedef U64 ZSTD_VecMask;
+
+typedef enum {
+ search_hashChain = 0,
+ search_binaryTree = 1,
+ search_rowHash = 2,
+} searchMethod_e;
+
+struct simple_pm_bus {
+ struct clk_bulk_data *clks;
+ int num_clks;
+};
+
+struct starfive_pinctrl {
+ struct gpio_chip gc;
+ struct pinctrl_gpio_range gpios;
+ raw_spinlock_t lock;
+ void *base;
+ void *padctl;
+ struct pinctrl_dev *pctl;
+ struct mutex mutex;
+};
+
+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 {
+ NVME_AEN_BIT_NS_ATTR = 8,
+ NVME_AEN_BIT_FW_ACT = 9,
+ NVME_AEN_BIT_ANA_CHANGE = 11,
+ NVME_AEN_BIT_DISC_CHANGE = 31,
+};
+
+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 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];
+};
+
+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 *);
+};
+
+struct fu740_pcie {
+ struct dw_pcie pci;
+ void *mgmt_base;
+ struct gpio_desc *reset;
+ struct gpio_desc *pwren;
+ struct clk *pcie_aux;
+ struct reset_control *rst;
+};
+
+struct fb_fix_screeninfo32 {
+ char id[16];
+ compat_caddr_t smem_start;
+ u32 smem_len;
+ u32 type;
+ u32 type_aux;
+ u32 visual;
+ u16 xpanstep;
+ u16 ypanstep;
+ u16 ywrapstep;
+ u32 line_length;
+ compat_caddr_t mmio_start;
+ u32 mmio_len;
+ u32 accel;
+ u16 reserved[3];
+};
+
+struct fb_cmap32 {
+ u32 start;
+ u32 len;
+ compat_caddr_t red;
+ compat_caddr_t green;
+ compat_caddr_t blue;
+ compat_caddr_t transp;
+};
+
+struct acpi_wakeup_handler {
+ struct list_head list_node;
+ bool (*wakeup)(void *);
+ void *context;
+};
+
+struct find_child_walk_data {
+ struct acpi_device *adev;
+ u64 address;
+ int score;
+ bool check_sta;
+ bool check_children;
+};
+
+struct acpi_processor_errata {
+ u8 smp;
+ struct {
+ u8 throttle: 1;
+ u8 fdma: 1;
+ u8 reserved: 6;
+ u32 bmisx;
+ } piix4;
+};
+
+typedef u64 acpi_integer;
+
+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;
+};
+
+typedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *);
+
+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 acpi_status (*acpi_walk_aml_callback)(u8 *, u32, u32, u8, void **);
+
+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;
+};
+
+struct mcfg_entry {
+ struct list_head list;
+ phys_addr_t addr;
+ u16 segment;
+ u8 bus_start;
+ u8 bus_end;
+};
+
+struct mcfg_fixup {
+ char oem_id[7];
+ char oem_table_id[9];
+ u32 oem_revision;
+ u16 segment;
+ struct resource bus_range;
+ const struct pci_ecam_ops *ops;
+ struct resource cfgres;
+};
+
+struct acpi_rhct_node_header {
+ u16 type;
+ u16 length;
+ u16 revision;
+};
+
+enum acpi_rhct_node_type {
+ ACPI_RHCT_NODE_TYPE_ISA_STRING = 0,
+ ACPI_RHCT_NODE_TYPE_CMO = 1,
+ ACPI_RHCT_NODE_TYPE_MMU = 2,
+ ACPI_RHCT_NODE_TYPE_RESERVED = 3,
+ ACPI_RHCT_NODE_TYPE_HART_INFO = 65535,
+};
+
+struct acpi_rhct_isa_string {
+ u16 isa_length;
+ char isa[0];
+};
+
+struct acpi_rhct_cmo_node {
+ u8 reserved;
+ u8 cbom_size;
+ u8 cbop_size;
+ u8 cboz_size;
+};
+
+struct acpi_rhct_hart_info {
+ u16 num_offsets;
+ u32 uid;
+} __attribute__((packed));
+
+struct sbi_cppc_data {
+ u64 val;
+ u32 reg;
+ struct sbiret ret;
+};
+
+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_mux {
+ struct clk_hw hw;
+ void *reg;
+ const u32 *table;
+ u32 mask;
+ u8 shift;
+ u8 flags;
+ spinlock_t *lock;
+};
+
+struct sg2042_divider_clock {
+ struct clk_hw hw;
+ unsigned int id;
+ void *reg;
+ spinlock_t *lock;
+ u32 offset_ctrl;
+ u8 shift;
+ u8 width;
+ u8 div_flags;
+ u32 initval;
+};
+
+struct sg2042_gate_clock {
+ struct clk_hw hw;
+ unsigned int id;
+ u32 offset_enable;
+ u8 bit_idx;
+};
+
+struct sg2042_mux_clock {
+ struct clk_hw hw;
+ unsigned int id;
+ u32 offset_select;
+ u8 shift;
+ u8 width;
+ struct notifier_block clk_nb;
+ u8 original_index;
+};
+
+struct _ccu_mult {
+ long unsigned int mult;
+ long unsigned int min;
+ long unsigned int max;
+};
+
+struct _ccu_nkmp {
+ long unsigned int n;
+ long unsigned int min_n;
+ long unsigned int max_n;
+ long unsigned int k;
+ long unsigned int min_k;
+ long unsigned int max_k;
+ long unsigned int m;
+ long unsigned int min_m;
+ long unsigned int max_m;
+ long unsigned int p;
+ long unsigned int min_p;
+ long unsigned int max_p;
+};
+
+struct sun6i_rtc_match_data {
+ bool have_ext_osc32k: 1;
+ bool have_iosc_calibration: 1;
+ bool rtc_32k_single_parent: 1;
+ const struct clk_parent_data *osc32k_fanout_parents;
+ u8 osc32k_fanout_nparents;
+};
+
+struct dw_axi_dma_hcfg {
+ u32 nr_channels;
+ u32 nr_masters;
+ u32 m_data_width;
+ u32 block_size[32];
+ u32 priority[32];
+ u32 axi_rw_burst_len;
+ bool reg_map_8_channels;
+ bool restrict_axi_burst_len;
+ bool use_cfg2;
+};
+
+struct axi_dma_chip;
+
+struct axi_dma_desc;
+
+struct axi_dma_chan {
+ struct axi_dma_chip *chip;
+ void *chan_regs;
+ u8 id;
+ u8 hw_handshake_num;
+ atomic_t descs_allocated;
+ struct dma_pool *desc_pool;
+ struct virt_dma_chan vc;
+ struct axi_dma_desc *desc;
+ struct dma_slave_config config;
+ enum dma_transfer_direction direction;
+ bool cyclic;
+ bool is_paused;
+};
+
+struct dw_axi_dma;
+
+struct axi_dma_chip {
+ struct device *dev;
+ int irq[32];
+ void *regs;
+ void *apb_regs;
+ struct clk *core_clk;
+ struct clk *cfgr_clk;
+ struct dw_axi_dma *dw;
+};
+
+struct axi_dma_hw_desc;
+
+struct axi_dma_desc {
+ struct axi_dma_hw_desc *hw_desc;
+ struct virt_dma_desc vd;
+ struct axi_dma_chan *chan;
+ u32 completed_blocks;
+ u32 length;
+ u32 period_len;
+ u32 nr_hw_descs;
+};
+
+struct dw_axi_dma {
+ struct dma_device dma;
+ struct dw_axi_dma_hcfg *hdata;
+ struct device_dma_parameters dma_parms;
+ struct axi_dma_chan *chan;
+};
+
+struct axi_dma_lli {
+ __le64 sar;
+ __le64 dar;
+ __le32 block_ts_lo;
+ __le32 block_ts_hi;
+ __le64 llp;
+ __le32 ctl_lo;
+ __le32 ctl_hi;
+ __le32 sstat;
+ __le32 dstat;
+ __le32 status_lo;
+ __le32 status_hi;
+ __le32 reserved_lo;
+ __le32 reserved_hi;
+};
+
+struct axi_dma_hw_desc {
+ struct axi_dma_lli *lli;
+ dma_addr_t llp;
+ u32 len;
+};
+
+struct axi_dma_chan_config {
+ u8 dst_multblk_type;
+ u8 src_multblk_type;
+ u8 dst_per;
+ u8 src_per;
+ u8 tt_fc;
+ u8 prior;
+ u8 hs_sel_dst;
+ u8 hs_sel_src;
+};
+
+enum {
+ DWAXIDMAC_ARWLEN_1 = 0,
+ DWAXIDMAC_ARWLEN_2 = 1,
+ DWAXIDMAC_ARWLEN_4 = 3,
+ DWAXIDMAC_ARWLEN_8 = 7,
+ DWAXIDMAC_ARWLEN_16 = 15,
+ DWAXIDMAC_ARWLEN_32 = 31,
+ DWAXIDMAC_ARWLEN_64 = 63,
+ DWAXIDMAC_ARWLEN_128 = 127,
+ DWAXIDMAC_ARWLEN_256 = 255,
+ DWAXIDMAC_ARWLEN_MIN = 0,
+ DWAXIDMAC_ARWLEN_MAX = 255,
+};
+
+enum {
+ DWAXIDMAC_BURST_TRANS_LEN_1 = 0,
+ DWAXIDMAC_BURST_TRANS_LEN_4 = 1,
+ DWAXIDMAC_BURST_TRANS_LEN_8 = 2,
+ DWAXIDMAC_BURST_TRANS_LEN_16 = 3,
+ DWAXIDMAC_BURST_TRANS_LEN_32 = 4,
+ DWAXIDMAC_BURST_TRANS_LEN_64 = 5,
+ DWAXIDMAC_BURST_TRANS_LEN_128 = 6,
+ DWAXIDMAC_BURST_TRANS_LEN_256 = 7,
+ DWAXIDMAC_BURST_TRANS_LEN_512 = 8,
+ DWAXIDMAC_BURST_TRANS_LEN_1024 = 9,
+};
+
+enum {
+ DWAXIDMAC_CH_CTL_L_INC = 0,
+ DWAXIDMAC_CH_CTL_L_NOINC = 1,
+};
+
+enum {
+ DWAXIDMAC_HS_SEL_HW = 0,
+ DWAXIDMAC_HS_SEL_SW = 1,
+};
+
+enum {
+ DWAXIDMAC_TT_FC_MEM_TO_MEM_DMAC = 0,
+ DWAXIDMAC_TT_FC_MEM_TO_PER_DMAC = 1,
+ DWAXIDMAC_TT_FC_PER_TO_MEM_DMAC = 2,
+ DWAXIDMAC_TT_FC_PER_TO_PER_DMAC = 3,
+ DWAXIDMAC_TT_FC_PER_TO_MEM_SRC = 4,
+ DWAXIDMAC_TT_FC_PER_TO_PER_SRC = 5,
+ DWAXIDMAC_TT_FC_MEM_TO_PER_DST = 6,
+ DWAXIDMAC_TT_FC_PER_TO_PER_DST = 7,
+};
+
+enum {
+ DWAXIDMAC_MBLK_TYPE_CONTIGUOUS = 0,
+ DWAXIDMAC_MBLK_TYPE_RELOAD = 1,
+ DWAXIDMAC_MBLK_TYPE_SHADOW_REG = 2,
+ DWAXIDMAC_MBLK_TYPE_LL = 3,
+};
+
+enum {
+ DWAXIDMAC_IRQ_NONE = 0,
+ DWAXIDMAC_IRQ_BLOCK_TRF = 1,
+ DWAXIDMAC_IRQ_DMA_TRF = 2,
+ DWAXIDMAC_IRQ_SRC_TRAN = 8,
+ DWAXIDMAC_IRQ_DST_TRAN = 16,
+ DWAXIDMAC_IRQ_SRC_DEC_ERR = 32,
+ DWAXIDMAC_IRQ_DST_DEC_ERR = 64,
+ DWAXIDMAC_IRQ_SRC_SLV_ERR = 128,
+ DWAXIDMAC_IRQ_DST_SLV_ERR = 256,
+ DWAXIDMAC_IRQ_LLI_RD_DEC_ERR = 512,
+ DWAXIDMAC_IRQ_LLI_WR_DEC_ERR = 1024,
+ DWAXIDMAC_IRQ_LLI_RD_SLV_ERR = 2048,
+ DWAXIDMAC_IRQ_LLI_WR_SLV_ERR = 4096,
+ DWAXIDMAC_IRQ_INVALID_ERR = 8192,
+ DWAXIDMAC_IRQ_MULTIBLKTYPE_ERR = 16384,
+ DWAXIDMAC_IRQ_DEC_ERR = 65536,
+ DWAXIDMAC_IRQ_WR2RO_ERR = 131072,
+ DWAXIDMAC_IRQ_RD2RWO_ERR = 262144,
+ DWAXIDMAC_IRQ_WRONCHEN_ERR = 524288,
+ DWAXIDMAC_IRQ_SHADOWREG_ERR = 1048576,
+ DWAXIDMAC_IRQ_WRONHOLD_ERR = 2097152,
+ DWAXIDMAC_IRQ_LOCK_CLEARED = 134217728,
+ DWAXIDMAC_IRQ_SRC_SUSPENDED = 268435456,
+ DWAXIDMAC_IRQ_SUSPENDED = 536870912,
+ DWAXIDMAC_IRQ_DISABLED = 1073741824,
+ DWAXIDMAC_IRQ_ABORTED = 2147483648,
+ DWAXIDMAC_IRQ_ALL_ERR = 4161504,
+ DWAXIDMAC_IRQ_ALL = 4294967295,
+};
+
+enum {
+ DWAXIDMAC_TRANS_WIDTH_8 = 0,
+ DWAXIDMAC_TRANS_WIDTH_16 = 1,
+ DWAXIDMAC_TRANS_WIDTH_32 = 2,
+ DWAXIDMAC_TRANS_WIDTH_64 = 3,
+ DWAXIDMAC_TRANS_WIDTH_128 = 4,
+ DWAXIDMAC_TRANS_WIDTH_256 = 5,
+ DWAXIDMAC_TRANS_WIDTH_512 = 6,
+ DWAXIDMAC_TRANS_WIDTH_MAX = 6,
+};
+
+enum {
+ VP_MSIX_CONFIG_VECTOR = 0,
+ VP_MSIX_VQ_VECTOR = 1,
+};
+
+enum vp_vq_vector_policy {
+ VP_VQ_VECTOR_POLICY_EACH = 0,
+ VP_VQ_VECTOR_POLICY_SHARED_SLOW = 1,
+ VP_VQ_VECTOR_POLICY_SHARED = 2,
+};
+
+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 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;
+ long unsigned int char_map[4];
+ long unsigned int 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];
+ long unsigned int 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;
+};
+
+enum {
+ ERASE = 0,
+ WERASE = 1,
+ KILL = 2,
+};
+
+struct tty_audit_buf {
+ struct mutex mutex;
+ dev_t dev;
+ bool icanon;
+ size_t valid;
+ u8 *data;
+};
+
+struct hv_ops;
+
+struct hvc_struct {
+ struct tty_port port;
+ spinlock_t lock;
+ int index;
+ int do_wakeup;
+ 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;
+ long unsigned int flags;
+ u8 outbuf[0];
+};
+
+struct hv_ops {
+ ssize_t (*get_chars)(uint32_t, u8 *, size_t);
+ ssize_t (*put_chars)(uint32_t, const u8 *, size_t);
+ 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);
+};
+
+enum UART_TX_FLAGS {
+ UART_TX_NOSTOP = 1,
+};
+
+struct sifive_serial_port {
+ struct uart_port port;
+ struct device *dev;
+ unsigned char ier;
+ long unsigned int baud_rate;
+ struct clk *clk;
+ struct notifier_block clk_notifier;
+};
+
+struct virtio_console_config {
+ __virtio16 cols;
+ __virtio16 rows;
+ __virtio32 max_nr_ports;
+ __virtio32 emerg_wr;
+};
+
+struct virtio_console_control {
+ __virtio32 id;
+ __virtio16 event;
+ __virtio16 value;
+};
+
+struct ports_driver_data {
+ struct dentry *debugfs_dir;
+ struct list_head portdevs;
+ struct list_head consoles;
+};
+
+struct console___2 {
+ struct list_head list;
+ struct hvc_struct *hvc;
+ struct winsize ws;
+ u32 vtermno;
+};
+
+struct port_buffer {
+ char *buf;
+ size_t size;
+ size_t len;
+ size_t offset;
+ dma_addr_t dma;
+ struct device *dev;
+ struct list_head list;
+ unsigned int sgpages;
+ struct scatterlist sg[0];
+};
+
+struct ports_device {
+ struct list_head list;
+ struct work_struct control_work;
+ struct work_struct config_work;
+ struct list_head ports;
+ spinlock_t ports_lock;
+ spinlock_t c_ivq_lock;
+ spinlock_t c_ovq_lock;
+ u32 max_nr_ports;
+ struct virtio_device *vdev;
+ struct virtqueue *c_ivq;
+ struct virtqueue *c_ovq;
+ struct virtio_console_control cpkt;
+ struct virtqueue **in_vqs;
+ struct virtqueue **out_vqs;
+ int chr_major;
+};
+
+struct port_stats {
+ long unsigned int bytes_sent;
+ long unsigned int bytes_received;
+ long unsigned int bytes_discarded;
+};
+
+struct port {
+ struct list_head list;
+ struct ports_device *portdev;
+ struct port_buffer *inbuf;
+ spinlock_t inbuf_lock;
+ spinlock_t outvq_lock;
+ struct virtqueue *in_vq;
+ struct virtqueue *out_vq;
+ struct dentry *debugfs_file;
+ struct port_stats stats;
+ struct console___2 cons;
+ struct cdev *cdev;
+ struct device *dev;
+ struct kref kref;
+ wait_queue_head_t waitqueue;
+ char *name;
+ struct fasync_struct *async_queue;
+ u32 id;
+ bool outvq_full;
+ bool host_connected;
+ bool guest_connected;
+};
+
+struct sg_list {
+ unsigned int n;
+ unsigned int size;
+ size_t len;
+ struct scatterlist *sg;
+};
+
+struct class_attribute_string {
+ struct class_attribute attr;
+ char *str;
+};
+
+struct class_compat {
+ struct kobject *kobj;
+};
+
+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;
+ 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 {
+ long unsigned int addr;
+ unsigned int order;
+};
+
+struct cache_type_info {
+ const char *size_prop;
+ const char *line_size_props[2];
+ const char *nr_sets_prop;
+};
+
+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 nvdimm_map {
+ struct nvdimm_bus *nvdimm_bus;
+ struct list_head list;
+ resource_size_t offset;
+ long unsigned int flags;
+ size_t size;
+ union {
+ void *mem;
+ void *iomem;
+ };
+ struct kref kref;
+};
+
+struct of_pmem_private {
+ struct nvdimm_bus_descriptor bus_desc;
+ struct nvdimm_bus *bus;
+};
+
+struct request_sense;
+
+struct cdrom_generic_command {
+ unsigned char cmd[12];
+ unsigned char *buffer;
+ unsigned int buflen;
+ int stat;
+ struct request_sense *sense;
+ unsigned char data_direction;
+ int quiet;
+ int timeout;
+ union {
+ void *reserved[1];
+ void *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];
+};
+
+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,
+};
+
+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;
+ short unsigned int iovec_count;
+ unsigned int dxfer_len;
+ void *dxferp;
+ unsigned char *cmdp;
+ void *sbp;
+ unsigned int timeout;
+ unsigned int flags;
+ int pack_id;
+ void *usr_ptr;
+ unsigned char status;
+ unsigned char masked_status;
+ unsigned char msg_status;
+ unsigned char sb_len_wr;
+ short unsigned int host_status;
+ short unsigned int driver_status;
+ int resid;
+ unsigned int duration;
+ unsigned int info;
+};
+
+struct compat_sg_io_hdr {
+ compat_int_t interface_id;
+ compat_int_t dxfer_direction;
+ unsigned char cmd_len;
+ unsigned char mx_sb_len;
+ short unsigned int 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;
+ short unsigned int host_status;
+ short unsigned int driver_status;
+ compat_int_t resid;
+ compat_uint_t duration;
+ compat_uint_t 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;
+};
+
+typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *);
+
+struct ata_scsi_args {
+ struct ata_device *dev;
+ u16 *id;
+ struct scsi_cmnd *cmd;
+};
+
+struct ahci_sg {
+ __le32 addr;
+ __le32 addr_hi;
+ __le32 reserved;
+ __le32 flags_size;
+};
+
+struct cfi_early_fixup {
+ uint16_t mfr;
+ uint16_t id;
+ void (*fixup)(struct cfi_private *);
+};
+
+struct spansion_nor_params {
+ u8 clsr;
+};
+
+enum rtl_dash_type {
+ RTL_DASH_NONE = 0,
+ RTL_DASH_DP = 1,
+ RTL_DASH_EP = 2,
+};
+
+struct ring_info {
+ struct sk_buff *skb;
+ u32 len;
+};
+
+struct rtl8169_tc_offsets {
+ bool inited;
+ __le64 tx_errors;
+ __le32 tx_multi_collision;
+ __le16 tx_aborted;
+ __le16 rx_missed;
+};
+
+struct r8169_led_classdev;
+
+struct TxDesc;
+
+struct RxDesc;
+
+struct rtl8169_counters;
+
+struct rtl8169_private {
+ void *mmio_addr;
+ struct pci_dev *pci_dev;
+ struct net_device *dev;
+ struct phy_device *phydev;
+ struct napi_struct napi;
+ enum mac_version mac_version;
+ enum rtl_dash_type dash_type;
+ u32 cur_rx;
+ u32 cur_tx;
+ u32 dirty_tx;
+ struct TxDesc *TxDescArray;
+ struct RxDesc *RxDescArray;
+ dma_addr_t TxPhyAddr;
+ dma_addr_t RxPhyAddr;
+ struct page *Rx_databuff[256];
+ struct ring_info tx_skb[256];
+ u16 cp_cmd;
+ u16 tx_lpi_timer;
+ u32 irq_mask;
+ int irq;
+ struct clk *clk;
+ struct {
+ long unsigned int flags[1];
+ struct work_struct work;
+ } wk;
+ raw_spinlock_t config25_lock;
+ raw_spinlock_t mac_ocp_lock;
+ struct mutex led_lock;
+ raw_spinlock_t cfg9346_usage_lock;
+ int cfg9346_usage_count;
+ unsigned int supports_gmii: 1;
+ unsigned int aspm_manageable: 1;
+ unsigned int dash_enabled: 1;
+ dma_addr_t counters_phys_addr;
+ struct rtl8169_counters *counters;
+ struct rtl8169_tc_offsets tc_offset;
+ u32 saved_wolopts;
+ const char *fw_name;
+ struct rtl_fw *rtl_fw;
+ struct r8169_led_classdev *leds;
+ u32 ocp_base;
+};
+
+enum rtl_registers {
+ MAC0 = 0,
+ MAC4 = 4,
+ MAR0 = 8,
+ CounterAddrLow = 16,
+ CounterAddrHigh = 20,
+ TxDescStartAddrLow = 32,
+ TxDescStartAddrHigh = 36,
+ TxHDescStartAddrLow = 40,
+ TxHDescStartAddrHigh = 44,
+ FLASH = 48,
+ ERSR = 54,
+ ChipCmd = 55,
+ TxPoll = 56,
+ IntrMask = 60,
+ IntrStatus = 62,
+ TxConfig = 64,
+ RxConfig = 68,
+ Cfg9346 = 80,
+ Config0 = 81,
+ Config1 = 82,
+ Config2 = 83,
+ Config3 = 84,
+ Config4 = 85,
+ Config5 = 86,
+ PHYAR = 96,
+ PHYstatus = 108,
+ RxMaxSize = 218,
+ CPlusCmd = 224,
+ IntrMitigate = 226,
+ RxDescAddrLow = 228,
+ RxDescAddrHigh = 232,
+ EarlyTxThres = 236,
+ MaxTxPacketSize = 236,
+ FuncEvent = 240,
+ FuncEventMask = 244,
+ FuncPresetState = 248,
+ IBCR0 = 248,
+ IBCR2 = 249,
+ IBIMR0 = 250,
+ IBISR0 = 251,
+ FuncForceEvent = 252,
+};
+
+enum rtl8168_8101_registers {
+ CSIDR = 100,
+ CSIAR = 104,
+ PMCH = 111,
+ EPHYAR = 128,
+ DLLPR = 208,
+ DBG_REG = 209,
+ TWSI = 210,
+ MCU = 211,
+ EFUSEAR = 220,
+ MISC_1 = 242,
+};
+
+enum rtl8168_registers {
+ LED_CTRL = 24,
+ LED_FREQ = 26,
+ EEE_LED = 27,
+ ERIDR = 112,
+ ERIAR = 116,
+ EPHY_RXER_NUM = 124,
+ OCPDR = 176,
+ OCPAR = 180,
+ GPHY_OCP = 184,
+ RDSAR1 = 208,
+ MISC = 240,
+};
+
+enum rtl8125_registers {
+ LEDSEL0 = 24,
+ INT_CFG0_8125 = 52,
+ IntrMask_8125 = 56,
+ IntrStatus_8125 = 60,
+ INT_CFG1_8125 = 122,
+ LEDSEL2 = 132,
+ LEDSEL1 = 134,
+ TxPoll_8125 = 144,
+ LEDSEL3 = 150,
+ MAC0_BKP = 6624,
+ EEE_TXIDLE_TIMER_8125 = 24648,
+};
+
+enum rtl_register_content {
+ SYSErr = 32768,
+ PCSTimeout = 16384,
+ SWInt = 256,
+ TxDescUnavail = 128,
+ RxFIFOOver = 64,
+ LinkChg = 32,
+ RxOverflow = 16,
+ TxErr = 8,
+ TxOK = 4,
+ RxErr = 2,
+ RxOK = 1,
+ RxRWT = 4194304,
+ RxRES = 2097152,
+ RxRUNT = 1048576,
+ RxCRC = 524288,
+ StopReq = 128,
+ CmdReset = 16,
+ CmdRxEnb = 8,
+ CmdTxEnb = 4,
+ RxBufEmpty = 1,
+ HPQ = 128,
+ NPQ = 64,
+ FSWInt = 1,
+ Cfg9346_Lock = 0,
+ Cfg9346_Unlock = 192,
+ AcceptErr = 32,
+ AcceptRunt = 16,
+ AcceptBroadcast = 8,
+ AcceptMulticast = 4,
+ AcceptMyPhys = 2,
+ AcceptAllPhys = 1,
+ TxInterFrameGapShift = 24,
+ TxDMAShift = 8,
+ LEDS1 = 128,
+ LEDS0 = 64,
+ Speed_down = 16,
+ MEMMAP = 8,
+ IOMAP = 4,
+ VPD = 2,
+ PMEnable = 1,
+ ClkReqEn = 128,
+ MSIEnable = 32,
+ PCI_Clock_66MHz = 1,
+ PCI_Clock_33MHz = 0,
+ MagicPacket = 32,
+ LinkUp = 16,
+ Jumbo_En0 = 4,
+ Rdy_to_L23 = 2,
+ Beacon_en = 1,
+ Jumbo_En1 = 2,
+ BWF = 64,
+ MWF = 32,
+ UWF = 16,
+ Spi_en = 8,
+ LanWake = 2,
+ PMEStatus = 1,
+ ASPM_en = 1,
+ EnableBist = 32768,
+ Mac_dbgo_oe = 16384,
+ EnAnaPLL = 16384,
+ Normal_mode = 8192,
+ Force_half_dup = 4096,
+ Force_rxflow_en = 2048,
+ Force_txflow_en = 1024,
+ Cxpl_dbg_sel = 512,
+ ASF = 256,
+ PktCntrDisable = 128,
+ Mac_dbgo_sel = 28,
+ RxVlan = 64,
+ RxChkSum = 32,
+ PCIDAC = 16,
+ PCIMulRW = 8,
+ TBI_Enable = 128,
+ TxFlowCtrl = 64,
+ RxFlowCtrl = 32,
+ _1000bpsF = 16,
+ _100bps = 8,
+ _10bps = 4,
+ LinkStatus = 2,
+ FullDup = 1,
+ CounterReset = 1,
+ CounterDump = 8,
+ MagicPacket_v2 = 65536,
+};
+
+enum rtl_desc_bit {
+ DescOwn = -2147483648,
+ RingEnd = 1073741824,
+ FirstFrag = 536870912,
+ LastFrag = 268435456,
+};
+
+enum rtl_tx_desc_bit {
+ TD_LSO = 134217728,
+ TxVlanTag = 131072,
+};
+
+enum rtl_tx_desc_bit_0 {
+ TD0_TCP_CS = 65536,
+ TD0_UDP_CS = 131072,
+ TD0_IP_CS = 262144,
+};
+
+enum rtl_tx_desc_bit_1 {
+ TD1_GTSENV4 = 67108864,
+ TD1_GTSENV6 = 33554432,
+ TD1_IPv6_CS = 268435456,
+ TD1_IPv4_CS = 536870912,
+ TD1_TCP_CS = 1073741824,
+ TD1_UDP_CS = -2147483648,
+};
+
+enum rtl_rx_desc_bit {
+ PID1 = 262144,
+ PID0 = 131072,
+ IPFail = 65536,
+ UDPFail = 32768,
+ TCPFail = 16384,
+ RxVlanTag = 65536,
+};
+
+struct TxDesc {
+ __le32 opts1;
+ __le32 opts2;
+ __le64 addr;
+};
+
+struct RxDesc {
+ __le32 opts1;
+ __le32 opts2;
+ __le64 addr;
+};
+
+struct rtl8169_counters {
+ __le64 tx_packets;
+ __le64 rx_packets;
+ __le64 tx_errors;
+ __le32 rx_errors;
+ __le16 rx_missed;
+ __le16 align_errors;
+ __le32 tx_one_collision;
+ __le32 tx_multi_collision;
+ __le64 rx_unicast;
+ __le64 rx_broadcast;
+ __le32 rx_multicast;
+ __le16 tx_aborted;
+ __le16 tx_underrun;
+ __le64 tx_octets;
+ __le64 rx_octets;
+ __le64 rx_multicast64;
+ __le64 tx_unicast64;
+ __le64 tx_broadcast64;
+ __le64 tx_multicast64;
+ __le32 tx_pause_on;
+ __le32 tx_pause_off;
+ __le32 tx_pause_all;
+ __le32 tx_deferred;
+ __le32 tx_late_collision;
+ __le32 tx_all_collision;
+ __le32 tx_aborted32;
+ __le32 align_errors32;
+ __le32 rx_frame_too_long;
+ __le32 rx_runt;
+ __le32 rx_pause_on;
+ __le32 rx_pause_off;
+ __le32 rx_pause_all;
+ __le32 rx_unknown_opcode;
+ __le32 rx_mac_error;
+ __le32 tx_underrun32;
+ __le32 rx_mac_missed;
+ __le32 rx_tcam_dropped;
+ __le32 tdu;
+ __le32 rdu;
+};
+
+enum rtl_flag {
+ RTL_FLAG_TASK_ENABLED = 0,
+ RTL_FLAG_TASK_RESET_PENDING = 1,
+ RTL_FLAG_TASK_RESET_NO_QUEUE_WAKE = 2,
+ RTL_FLAG_TASK_TX_TIMEOUT = 3,
+ RTL_FLAG_MAX = 4,
+};
+
+typedef void (*rtl_generic_fct)(struct rtl8169_private *);
+
+struct rtl_cond {
+ bool (*check)(struct rtl8169_private *);
+ const char *msg;
+};
+
+struct rtl_coalesce_info {
+ u32 speed;
+ u32 scale_nsecs[4];
+};
+
+struct ephy_info {
+ unsigned int offset;
+ u16 mask;
+ u16 bits;
+};
+
+struct rtl_mac_info {
+ u16 mask;
+ u16 val;
+ enum mac_version ver;
+};
+
+struct phy_devm {
+ struct usb_phy *phy;
+ struct notifier_block *nb;
+};
+
+enum xhci_ep_reset_type {
+ EP_HARD_RESET = 0,
+ EP_SOFT_RESET = 1,
+};
+
+struct xhci_plat_priv {
+ const char *firmware_name;
+ long long unsigned int 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 *);
+};
+
+struct serport {
+ struct tty_struct *tty;
+ wait_queue_head_t wait;
+ struct serio *serio;
+ struct serio_device_id id;
+ spinlock_t lock;
+ long unsigned int flags;
+};
+
+struct byd_data {
+ struct timer_list timer;
+ struct psmouse *psmouse;
+ s32 abs_x;
+ s32 abs_y;
+ volatile long unsigned int last_touch_time;
+ bool btn_left;
+ bool btn_right;
+ bool touch;
+};
+
+struct psmouse_smbus_dev {
+ struct i2c_board_info board;
+ struct psmouse *psmouse;
+ struct i2c_client *client;
+ struct list_head node;
+ bool dead;
+ bool need_deactivate;
+};
+
+struct psmouse_smbus_removal_work {
+ struct work_struct work;
+ struct i2c_client *client;
+};
+
+struct i2c_device_identity {
+ u16 manufacturer_id;
+ u16 part_id;
+ u8 die_revision;
+};
+
+struct i2c_cmd_arg {
+ unsigned int cmd;
+ void *arg;
+};
+
+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,
+};
+
+enum {
+ POWER_SUPPLY_HEALTH_UNKNOWN = 0,
+ POWER_SUPPLY_HEALTH_GOOD = 1,
+ POWER_SUPPLY_HEALTH_OVERHEAT = 2,
+ POWER_SUPPLY_HEALTH_DEAD = 3,
+ POWER_SUPPLY_HEALTH_OVERVOLTAGE = 4,
+ POWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5,
+ POWER_SUPPLY_HEALTH_COLD = 6,
+ POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7,
+ POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8,
+ POWER_SUPPLY_HEALTH_OVERCURRENT = 9,
+ POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED = 10,
+ POWER_SUPPLY_HEALTH_WARM = 11,
+ POWER_SUPPLY_HEALTH_COOL = 12,
+ POWER_SUPPLY_HEALTH_HOT = 13,
+ POWER_SUPPLY_HEALTH_NO_BATTERY = 14,
+};
+
+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_charge_behaviour {
+ POWER_SUPPLY_CHARGE_BEHAVIOUR_AUTO = 0,
+ POWER_SUPPLY_CHARGE_BEHAVIOUR_INHIBIT_CHARGE = 1,
+ POWER_SUPPLY_CHARGE_BEHAVIOUR_FORCE_DISCHARGE = 2,
+};
+
+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;
+};
+
+struct thermal_hwmon_device {
+ char type[20];
+ struct device *device;
+ int count;
+ struct list_head tz_list;
+ struct list_head node;
+};
+
+struct thermal_hwmon_attr {
+ struct device_attribute attr;
+ char name[16];
+};
+
+struct thermal_hwmon_temp {
+ struct list_head hwmon_node;
+ struct thermal_zone_device *tz;
+ struct thermal_hwmon_attr temp_input;
+ struct thermal_hwmon_attr temp_crit;
+};
+
+struct devfreq_cooling_device {
+ struct thermal_cooling_device *cdev;
+ struct thermal_cooling_device_ops cooling_ops;
+ struct devfreq *devfreq;
+ long unsigned int 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 opp_config_data {
+ struct opp_table *opp_table;
+ unsigned int flags;
+};
+
+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_clk_phase {
+ bool valid;
+ u16 in_deg;
+ u16 out_deg;
+};
+
+struct mmc_clk_phase_map {
+ struct mmc_clk_phase phase[11];
+};
+
+struct cqhci_slot {
+ struct mmc_request *mrq;
+ unsigned int flags;
+};
+
+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 tpm_digest {
+ u16 alg_id;
+ u8 digest[64];
+};
+
+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 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_pcr_event {
+ u32 pcr_idx;
+ u32 event_type;
+ u8 digest[20];
+ u32 event_size;
+ u8 event[0];
+};
+
+struct tcg_event_field {
+ u32 event_size;
+ u8 event[0];
+};
+
+struct tcg_pcr_event2_head {
+ u32 pcr_idx;
+ u32 event_type;
+ u32 count;
+ struct tpm_digest digests[0];
+};
+
+struct quirks_list_struct {
+ struct hid_device_id hid_bl_item;
+ struct list_head node;
+};
+
+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_intc_desc {
+ struct list_head list;
+ of_irq_init_cb_t irq_init_cb;
+ struct device_node *dev;
+ struct device_node *interrupt_parent;
+};
+
+struct extcon_dev_notifier_devres {
+ struct extcon_dev *edev;
+ unsigned int id;
+ struct notifier_block *nb;
+};
+
+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,
+};
+
+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_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 *buf;
+ snd_pcm_uframes_t frames;
+};
+
+struct snd_xfern {
+ snd_pcm_sframes_t result;
+ void **bufs;
+ snd_pcm_uframes_t frames;
+};
+
+struct snd_pcm_file {
+ struct snd_pcm_substream *substream;
+ int no_compat_mmap;
+ unsigned int user_pversion;
+};
+
+typedef struct {
+ struct snd_pcm_substream *lock;
+} class_pcm_stream_lock_irq_t;
+
+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_hw_params_old {
+ unsigned int flags;
+ unsigned int masks[3];
+ struct snd_interval intervals[12];
+ 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 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);
+};
+
+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_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 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_xferi32 {
+ s32 result;
+ u32 buf;
+ u32 frames;
+};
+
+struct snd_xfern32 {
+ s32 result;
+ u32 bufs;
+ u32 frames;
+};
+
+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;
+};
+
+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 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;
+};
+
+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,
+};
+
+struct flow_dissector_key_hash {
+ u32 hash;
+};
+
+struct flow_dissector_key_num_of_vlans {
+ u8 num_of_vlans;
+};
+
+struct flow_dissector_key_cfm {
+ u8 mdl_ver;
+ u8 opcode;
+};
+
+struct flow_dissector_key {
+ enum flow_dissector_key_id key_id;
+ size_t offset;
+};
+
+struct flow_keys_digest {
+ u8 data[16];
+};
+
+struct ip_esp_hdr {
+ __be32 spi;
+ __be32 seq_no;
+ __u8 enc_data[0];
+};
+
+enum bpf_ret_code {
+ BPF_OK = 0,
+ BPF_DROP = 2,
+ BPF_REDIRECT = 7,
+ BPF_LWT_REROUTE = 128,
+ BPF_FLOW_DISSECTOR_CONTINUE = 129,
+};
+
+enum {
+ BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,
+ BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,
+ BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
+};
+
+struct gre_full_hdr {
+ struct gre_base_hdr fixed_header;
+ __be16 csum;
+ __be16 reserved1;
+ __be32 key;
+ __be32 seq;
+};
+
+struct pptp_gre_header {
+ struct gre_base_hdr gre_hd;
+ __be16 payload_len;
+ __be16 call_id;
+ __be32 seq;
+ __be32 ack;
+};
+
+struct tipc_basic_hdr {
+ __be32 w[4];
+};
+
+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];
+};
+
+struct hsr_tag {
+ __be16 path_and_LSDU_size;
+ __be16 sequence_nr;
+ __be16 encap_proto;
+};
+
+struct mpls_label {
+ __be32 entry;
+};
+
+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 batadv_unicast_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 ttvn;
+ __u8 dest[6];
+};
+
+struct nf_ct_ext {
+ u8 offset[4];
+ u8 len;
+ unsigned int gen_id;
+ long: 0;
+ char data[0];
+};
+
+struct nf_conn_labels {
+ long unsigned int bits[2];
+};
+
+struct _flow_keys_digest_data {
+ __be16 n_proto;
+ u8 ip_proto;
+ u8 padding;
+ __be32 ports;
+ __be32 src;
+ __be32 dst;
+};
+
+struct nda_cacheinfo {
+ __u32 ndm_confirmed;
+ __u32 ndm_used;
+ __u32 ndm_updated;
+ __u32 ndm_refcnt;
+};
+
+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;
+};
+
+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 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;
+};
+
+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,
+};
+
+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 neigh_sysctl_table {
+ struct ctl_table_header *sysctl_header;
+ struct ctl_table neigh_vars[21];
+};
+
+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 netsfhdr {
+ __be32 version;
+ __be64 magic;
+ u8 id;
+} __attribute__((packed));
+
+struct net_test {
+ char name[32];
+ int (*fn)(struct net_device *);
+};
+
+struct gro_cell {
+ struct sk_buff_head napi_skbs;
+ struct napi_struct napi;
+};
+
+struct percpu_free_defer {
+ struct callback_head rcu;
+ void *ptr;
+};
+
+enum net_xmit_qdisc_t {
+ __NET_XMIT_STOLEN = 65536,
+ __NET_XMIT_BYPASS = 131072,
+};
+
+struct sockaddr_nl {
+ __kernel_sa_family_t nl_family;
+ short unsigned int nl_pad;
+ __u32 nl_pid;
+ __u32 nl_groups;
+};
+
+struct nlmsgerr {
+ int error;
+ struct nlmsghdr msg;
+};
+
+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 nl_pktinfo {
+ __u32 group;
+};
+
+enum {
+ NETLINK_UNCONNECTED = 0,
+ NETLINK_CONNECTED = 1,
+};
+
+enum netlink_skb_flags {
+ NETLINK_SKB_DST = 8,
+};
+
+struct netlink_notify {
+ struct net *net;
+ u32 portid;
+ int protocol;
+};
+
+struct netlink_tap {
+ struct net_device *dev;
+ struct module *module;
+ struct list_head list;
+};
+
+struct listeners {
+ struct callback_head rcu;
+ long unsigned int masks[0];
+};
+
+struct netlink_tap_net {
+ struct list_head netlink_tap_all;
+ struct mutex netlink_tap_lock;
+};
+
+struct netlink_compare_arg {
+ possible_net_t pnet;
+ u32 portid;
+};
+
+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 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;
+ };
+};
+
+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,
+};
+
+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_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,
+};
+
+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_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,
+ ETHTOOL_RING_USE_TCP_DATA_SPLIT = 32,
+};
+
+enum {
+ ETHTOOL_TCP_DATA_SPLIT_UNKNOWN = 0,
+ ETHTOOL_TCP_DATA_SPLIT_DISABLED = 1,
+ ETHTOOL_TCP_DATA_SPLIT_ENABLED = 2,
+};
+
+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_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,
+};
+
+struct mm_reply_data {
+ struct ethnl_reply_data base;
+ struct ethtool_mm_state state;
+ struct ethtool_mm_stats stats;
+};
+
+struct nf_hook_entries_rcu_head {
+ struct callback_head head;
+ void *allocation;
+};
+
+enum nf_nat_manip_type;
+
+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 *);
+ void (*remove_nat_bysrc)(struct nf_conn *);
+};
+
+struct nf_conntrack_zone {
+ u16 id;
+ u8 flags;
+ u8 dir;
+};
+
+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 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);
+};
+
+struct sock_bh_locked {
+ struct sock *sock;
+ local_lock_t bh_lock;
+};
+
+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 bpf_iter__tcp {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct sock_common *sk_common;
+ };
+ uid_t uid;
+};
+
+struct tcp_plb_state {
+ u8 consec_cong_rounds: 5;
+ u8 unused: 3;
+ u32 pause_until;
+};
+
+struct arpreq {
+ struct sockaddr arp_pa;
+ struct sockaddr arp_ha;
+ int arp_flags;
+ struct sockaddr arp_netmask;
+ char arp_dev[16];
+};
+
+enum {
+ AX25_VALUES_IPDEFMODE = 0,
+ AX25_VALUES_AXDEFMODE = 1,
+ AX25_VALUES_BACKOFF = 2,
+ AX25_VALUES_CONMODE = 3,
+ AX25_VALUES_WINDOW = 4,
+ AX25_VALUES_EWINDOW = 5,
+ AX25_VALUES_T1 = 6,
+ AX25_VALUES_T2 = 7,
+ AX25_VALUES_T3 = 8,
+ AX25_VALUES_IDLE = 9,
+ AX25_VALUES_N2 = 10,
+ AX25_VALUES_PACLEN = 11,
+ AX25_VALUES_PROTOCOL = 12,
+ AX25_MAX_VALUES = 13,
+};
+
+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;
+};
+
+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 *tnode[0];
+ };
+ };
+};
+
+struct tnode {
+ struct callback_head rcu;
+ t_key empty_children;
+ t_key full_children;
+ struct key_vector *parent;
+ struct key_vector kv[1];
+};
+
+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 trie {
+ struct key_vector kv[1];
+};
+
+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 xfrm_if_decode_session_result {
+ struct net *net;
+ u32 if_id;
+};
+
+struct xfrm_if_cb {
+ bool (*decode_session)(struct sk_buff *, short unsigned int, struct xfrm_if_decode_session_result *);
+};
+
+struct xfrm_policy_walk {
+ struct xfrm_policy_walk_entry walk;
+ u8 type;
+ u32 seq;
+};
+
+struct xfrmk_spdinfo {
+ u32 incnt;
+ u32 outcnt;
+ u32 fwdcnt;
+ u32 inscnt;
+ u32 outscnt;
+ u32 fwdscnt;
+ u32 spdhcnt;
+ u32 spdhmcnt;
+};
+
+struct xfrm_flo {
+ struct dst_entry *dst_orig;
+ u8 flags;
+};
+
+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;
+};
+
+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,
+};
+
+struct xfrm_pol_inexact_candidates {
+ struct hlist_head *res[4];
+};
+
+struct xfrm_flow_keys {
+ struct flow_dissector_key_basic basic;
+ struct flow_dissector_key_control control;
+ union {
+ struct flow_dissector_key_ipv4_addrs ipv4;
+ struct flow_dissector_key_ipv6_addrs ipv6;
+ } addrs;
+ struct flow_dissector_key_ip ip;
+ struct flow_dissector_key_icmp icmp;
+ struct flow_dissector_key_ports ports;
+ struct flow_dissector_key_keyid gre;
+};
+
+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;
+};
+
+enum fib6_walk_state {
+ FWS_L = 0,
+ FWS_R = 1,
+ FWS_C = 2,
+ FWS_U = 3,
+};
+
+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_entry_notifier_info {
+ struct fib_notifier_info info;
+ struct fib6_info *rt;
+ unsigned int nsiblings;
+};
+
+struct ipv6_route_iter {
+ struct seq_net_private p;
+ struct fib6_walker w;
+ loff_t skip;
+ struct fib6_table *tbl;
+ int sernum;
+};
+
+struct bpf_iter__ipv6_route {
+ union {
+ struct bpf_iter_meta *meta;
+ };
+ union {
+ struct fib6_info *rt;
+ };
+};
+
+struct fib6_cleaner {
+ struct fib6_walker w;
+ struct net *net;
+ int (*func)(struct fib6_info *, void *);
+ int sernum;
+ void *arg;
+ bool skip_notify;
+};
+
+enum {
+ FIB6_NO_SERNUM_CHANGE = 0,
+};
+
+struct fib6_dump_arg {
+ struct net *net;
+ struct notifier_block *nb;
+ struct netlink_ext_ack *extack;
+};
+
+struct fib6_nh_pcpu_arg {
+ struct fib6_info *from;
+ const struct fib6_table *table;
+};
+
+struct lookup_args {
+ int offset;
+ const struct in6_addr *addr;
+};
+
+typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *, const struct inet6_skb_parm *);
+
+struct icmpv6_msg {
+ struct sk_buff *skb;
+ int offset;
+ uint8_t type;
+};
+
+struct icmp6_err {
+ int err;
+ int fatal;
+};
+
+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 *next;
+ int priority;
+};
+
+enum xprt_xid_rb_cmp {
+ XID_RB_EQUAL = 0,
+ XID_RB_LEFT = 1,
+ XID_RB_RIGHT = 2,
+};
+
+enum {
+ SVC_POOL_AUTO = -1,
+ SVC_POOL_GLOBAL = 0,
+ SVC_POOL_PERCPU = 1,
+ SVC_POOL_PERNODE = 2,
+};
+
+struct svc_pool_map {
+ int count;
+ int mode;
+ unsigned int npools;
+ unsigned int *pool_to;
+ unsigned int *to_pool;
+};
+
+struct gss_cl_ctx {
+ refcount_t count;
+ enum rpc_gss_proc gc_proc;
+ u32 gc_seq;
+ u32 gc_seq_xmit;
+ spinlock_t gc_seq_lock;
+ struct gss_ctx *gc_gss_ctx;
+ struct xdr_netobj gc_wire_ctx;
+ struct xdr_netobj gc_acceptor;
+ u32 gc_win;
+ long unsigned int gc_expiry;
+ struct callback_head gc_rcu;
+};
+
+struct gss_upcall_msg;
+
+struct gss_cred {
+ struct rpc_cred gc_base;
+ enum rpc_gss_svc gc_service;
+ struct gss_cl_ctx *gc_ctx;
+ struct gss_upcall_msg *gc_upcall;
+ const char *gc_principal;
+ long unsigned int gc_upcall_timestamp;
+};
+
+struct gss_auth;
+
+struct gss_upcall_msg {
+ refcount_t count;
+ kuid_t uid;
+ const char *service_name;
+ struct rpc_pipe_msg msg;
+ struct list_head list;
+ struct gss_auth *auth;
+ struct rpc_pipe *pipe;
+ struct rpc_wait_queue rpc_waitqueue;
+ wait_queue_head_t waitqueue;
+ struct gss_cl_ctx *ctx;
+ char databuf[256];
+};
+
+struct gss_pipe {
+ struct rpc_pipe_dir_object pdo;
+ struct rpc_pipe *pipe;
+ struct rpc_clnt *clnt;
+ const char *name;
+ struct kref kref;
+};
+
+struct gss_auth {
+ struct kref kref;
+ struct hlist_node hash;
+ struct rpc_auth rpc_auth;
+ struct gss_api_mech *mech;
+ enum rpc_gss_svc service;
+ struct rpc_clnt *client;
+ struct net *net;
+ netns_tracker ns_tracker;
+ struct gss_pipe *gss_pipe[2];
+ const char *target_name;
+};
+
+struct gss_alloc_pdo {
+ struct rpc_clnt *clnt;
+ const char *name;
+ const struct rpc_pipe_ops *upcall_ops;
+};
+
+struct virtio_9p_config {
+ __virtio16 tag_len;
+ __u8 tag[0];
+};
+
+struct virtio_chan {
+ bool inuse;
+ spinlock_t lock;
+ struct p9_client *client;
+ struct virtio_device *vdev;
+ struct virtqueue *vq;
+ int ring_bufs_avail;
+ wait_queue_head_t *vc_wq;
+ long unsigned int p9_max_pages;
+ struct scatterlist sg[128];
+ char *tag;
+ struct list_head chan_list;
+};
+
+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 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;
+};
+
+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__ */
--- a/dae-core/trace/kern/headers/vmlinux.h
+++ b/dae-core/trace/kern/headers/vmlinux.h
@@ -2,6 +2,8 @@
#include "vmlinux-x86.h"
#elif defined(__TARGET_ARCH_arm64)
#include "vmlinux-arm64.h"
+#elif defined(__TARGET_ARCH_riscv)
+#include "vmlinux-riscv.h"
#else
/*
* For other architectures, we don't have a vmlinux.h file. But the normal dae